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);
}
