1function foo(o, prototype) { 2 return o instanceof prototype; 3} 4 5noInline(foo); 6 7function test(o, prototype, expected) { 8 var actual = foo(o, prototype); 9 if (actual != expected) 10 throw new Error("bad result: " + actual); 11} 12 13function Foo() { } 14 15function Bar() { } 16Bar.prototype = new Foo(); 17 18for (var i = 0; i < 10000; ++i) { 19 test(42, Object, false); 20 test(42, Array, false); 21 test(42, String, false); 22 test(42, Foo, false); 23 test(42, Bar, false); 24 test({}, Object, true); 25 test({}, Array, false); 26 test({}, String, false); 27 test({}, Foo, false); 28 test({}, Bar, false); 29 test([], Object, true); 30 test([], Array, true); 31 test([], String, false); 32 test([], Foo, false); 33 test([], Bar, false); 34 test(new Foo(), Object, true); 35 test(new Foo(), Array, false); 36 test(new Foo(), String, false); 37 test(new Foo(), Foo, true); 38 test(new Foo(), Bar, false); 39 test(new Bar(), Object, true); 40 test(new Bar(), Array, false); 41 test(new Bar(), String, false); 42 test(new Bar(), Foo, true); 43 test(new Bar(), Bar, true); 44} 45