| function Person(){} |
| function Ninja(){} |
| Ninja.prototype = new Person(); |
| function House(){} |
| |
| var empty = {}; |
| var person = new Person(); |
| var ninja = new Ninja(); |
| var house = new House(); |
| var string = new String(); |
| var bindNinja = Ninja.bind({}); |
| |
| var array = {}; |
| array.__proto__ = Array.prototype; |
| var array2 = {}; |
| array2.__proto__ = array.prototype; |
| |
| function test(v, v2) { |
| return v instanceof v2; |
| } |
| function test2(v, v2) { |
| return v instanceof v2; |
| } |
| function test3(v, v2) { |
| return v instanceof v2; |
| } |
| function test4(v, v2) { |
| return v instanceof v2; |
| } |
| |
| // Test if specialized for object works |
| for (var i=0; i!=41; i++) { |
| assertEq(test(person, Person), true); |
| assertEq(test(empty, Person), false); |
| assertEq(test(ninja, Person), true); |
| assertEq(test(house, Person), false); |
| assertEq(test(string, Person), false); |
| assertEq(test(new bindNinja(), Person), true); |
| assertEq(test(new Ninja(), bindNinja), true); |
| assertEq(test(string, String), true); |
| assertEq(test(array, Array), true); |
| assertEq(test(empty, Object), true); |
| |
| // Test if bailout works |
| assertEq(test(0.1, Object), false); |
| |
| // Should generate TypeError |
| var err = false; |
| try { |
| test(0.1, 5); |
| } catch (e) { err = true; } |
| assertEq(err, true); |
| |
| // Should generate TypeError |
| var err = false; |
| try { |
| test(empty, empty); |
| } catch (e) { err = true; } |
| assertEq(err, true); |
| |
| // Should generate TypeError |
| var err = false; |
| try { |
| test(5.0, empty); |
| } catch (e) { err = true; } |
| assertEq(err, true); |
| } |
| |
| // Test if specialized for non-object lhs |
| for (var i=0; i!=41; i++) { |
| assertEq(test2(0.1, Object), false); |
| } |
| |
| // Check if we don't regress on https://bugzilla.mozilla.org/show_bug.cgi?id=7635 |
| function Foo() {}; |
| theproto = {}; |
| Foo.prototype = theproto; |
| |
| for (var i=0; i!=41; i++) { |
| assertEq(test3(theproto, Foo), false); |
| } |
| |