js/src/jit-test/tests/ion/bug717466.js

changeset 0
6474c204b198
     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 +

mercurial