--- /dev/null
+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({}, 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);
+}