js/src/jit-test/tests/arrays/ion-push-nonwritable-length.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 function f(arr)
     2 {
     3   assertEq(arr.push(4), 5); // if it doesn't throw :-)
     4 }
     6 function test(out)
     7 {
     8   // Create an array of arrays, to be iterated over for [].push-calling.  We
     9   // can't just loop on push on a single array with non-writable length because
    10   // push throws when called on an array with non-writable length.
    11   var arrs = out.arrs = [];
    12   for (var i = 0; i < 100; i++)
    13     arrs.push([0, 1, 2, 3]);
    15   // Use a much-greater capacity than the eventual non-writable length, so that
    16   // the inline-push will work.
    17   var a = [0, 1, 2, 3, 4, 5, 6, 7];
    18   Object.defineProperty(a, "length", { writable: false, value: 4 });
    20   arrs.push(a);
    22   for (var i = 0, sz = arrs.length; i < sz; i++)
    23   {
    24     var arr = arrs[i];
    25     f(arr);
    26   }
    27 }
    29 var obj = {};
    30 var a, arrs;
    32 try
    33 {
    34   test(obj);
    35   throw new Error("didn't throw!");
    36 }
    37 catch (e)
    38 {
    39   assertEq(e instanceof TypeError, true, "expected TypeError, got " + e);
    41   arrs = obj.arrs;
    42   assertEq(arrs.length, 101);
    43   for (var i = 0; i < 100; i++)
    44   {
    45     assertEq(arrs[i].length, 5, "unexpected length for arrs[" + i + "]");
    46     assertEq(arrs[i][0], 0, "bad element for arrs[" + i + "][0]");
    47     assertEq(arrs[i][1], 1, "bad element for arrs[" + i + "][1]");
    48     assertEq(arrs[i][2], 2, "bad element for arrs[" + i + "][2]");
    49     assertEq(arrs[i][3], 3, "bad element for arrs[" + i + "][3]");
    50     assertEq(arrs[i][4], 4, "bad element for arrs[" + i + "][4]");
    51   }
    53   a = arrs[100];
    54   assertEq(a[0], 0, "bad element for a[" + i + "]");
    55   assertEq(a[1], 1, "bad element for a[" + i + "]");
    56   assertEq(a[2], 2, "bad element for a[" + i + "]");
    57   assertEq(a[3], 3, "bad element for a[" + i + "]");
    58   assertEq(a.hasOwnProperty(4), false, "element addition should have thrown");
    59   assertEq(a[4], undefined);
    60   assertEq(a.length, 4, "length shouldn't have been changed");
    61 }

mercurial