1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/jit-test/tests/ion/bug717466.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,82 @@ 1.4 +function Person(){} 1.5 +function Ninja(){} 1.6 +Ninja.prototype = new Person(); 1.7 +function House(){} 1.8 + 1.9 +var empty = {}; 1.10 +var person = new Person(); 1.11 +var ninja = new Ninja(); 1.12 +var house = new House(); 1.13 +var string = new String(); 1.14 +var bindNinja = Ninja.bind({}); 1.15 + 1.16 +var array = {}; 1.17 +array.__proto__ = Array.prototype; 1.18 +var array2 = {}; 1.19 +array2.__proto__ = array.prototype; 1.20 + 1.21 +function test(v, v2) { 1.22 + return v instanceof v2; 1.23 +} 1.24 +function test2(v, v2) { 1.25 + return v instanceof v2; 1.26 +} 1.27 +function test3(v, v2) { 1.28 + return v instanceof v2; 1.29 +} 1.30 +function test4(v, v2) { 1.31 + return v instanceof v2; 1.32 +} 1.33 + 1.34 +// Test if specialized for object works 1.35 +for (var i=0; i!=41; i++) { 1.36 + assertEq(test(person, Person), true); 1.37 + assertEq(test(empty, Person), false); 1.38 + assertEq(test(ninja, Person), true); 1.39 + assertEq(test(house, Person), false); 1.40 + assertEq(test(string, Person), false); 1.41 + assertEq(test(new bindNinja(), Person), true); 1.42 + assertEq(test(new Ninja(), bindNinja), true); 1.43 + assertEq(test(string, String), true); 1.44 + assertEq(test(array, Array), true); 1.45 + assertEq(test(empty, Object), true); 1.46 + 1.47 + // Test if bailout works 1.48 + assertEq(test(0.1, Object), false); 1.49 + 1.50 + // Should generate TypeError 1.51 + var err = false; 1.52 + try { 1.53 + test(0.1, 5); 1.54 + } catch (e) { err = true; } 1.55 + assertEq(err, true); 1.56 + 1.57 + // Should generate TypeError 1.58 + var err = false; 1.59 + try { 1.60 + test(empty, empty); 1.61 + } catch (e) { err = true; } 1.62 + assertEq(err, true); 1.63 + 1.64 + // Should generate TypeError 1.65 + var err = false; 1.66 + try { 1.67 + test(5.0, empty); 1.68 + } catch (e) { err = true; } 1.69 + assertEq(err, true); 1.70 +} 1.71 + 1.72 +// Test if specialized for non-object lhs 1.73 +for (var i=0; i!=41; i++) { 1.74 + assertEq(test2(0.1, Object), false); 1.75 +} 1.76 + 1.77 +// Check if we don't regress on https://bugzilla.mozilla.org/show_bug.cgi?id=7635 1.78 +function Foo() {}; 1.79 +theproto = {}; 1.80 +Foo.prototype = theproto; 1.81 + 1.82 +for (var i=0; i!=41; i++) { 1.83 + assertEq(test3(theproto, Foo), false); 1.84 +} 1.85 +