| function foo(o, prototype) { |
| return o instanceof prototype; |
| } |
| |
| noInline(foo); |
| |
| function test(o, prototype, expected) { |
| var actual = foo(o, prototype); |
| if (actual != expected) |
| throw new Error("bad result: " + actual); |
| } |
| |
| function Foo() { } |
| |
| function Bar() { } |
| Bar.prototype = new Foo(); |
| |
| for (var i = 0; i < 10000; ++i) { |
| test(42, Object, false); |
| test(42, Array, false); |
| test(42, String, false); |
| test(42, Foo, false); |
| test(42, Bar, false); |
| test({}, Object, true); |
| test({}, Array, false); |
| test({}, String, false); |
| test({}, Foo, false); |
| test({}, Bar, false); |
| test([], Object, true); |
| test([], Array, true); |
| test([], String, false); |
| test([], Foo, false); |
| test([], Bar, false); |
| test(new Foo(), Object, true); |
| test(new Foo(), Array, false); |
| test(new Foo(), String, false); |
| test(new Foo(), Foo, true); |
| test(new Foo(), Bar, false); |
| test(new Bar(), Object, true); |
| test(new Bar(), Array, false); |
| test(new Bar(), String, false); |
| test(new Bar(), Foo, true); |
| test(new Bar(), Bar, true); |
| } |