tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

megamorphic-get-has-dense.js (1638B)


      1 setJitCompilerOption("ic.force-megamorphic", 1);
      2 
      3 function testBasic() {
      4  // Create various native objects with dense elements.
      5  var objs = [[1, 2, 3], {0: 1, 1: 2, 2: 3}];
      6  var fun = x => x;
      7  fun[0] = 1;
      8  fun[1] = 2;
      9  fun[2] = 3;
     10  objs.push(fun);
     11  for (var i = 0; i < 20; i++) {
     12    var o = {};
     13    o["x" + i] = i;
     14    o[0] = 1;
     15    o[1] = 2;
     16    if (i < 10) {
     17      o[2] = 3;
     18    } else {
     19      // o[2] will be a hole.
     20      o[3] = 4;
     21    }
     22    objs.push(o);
     23  }
     24 
     25  // Access their dense elements.
     26  for (var i = 0; i < 10; i++) {
     27    for (var j = 0; j < objs.length; j++) {
     28      var obj = objs[j];
     29      assertEq(obj[0], 1);
     30      assertEq(obj[1], 2);
     31      assertEq(obj[2], j < 13 ? 3 : undefined);
     32      assertEq(obj[3], j >= 13 ? 4 : undefined);
     33      assertEq(0 in obj, true);
     34      assertEq(1 in obj, true);
     35      assertEq(2 in obj, j < 13);
     36      assertEq(3 in obj, j >= 13);
     37      assertEq(Object.hasOwn(obj, 0), true);
     38      assertEq(Object.hasOwn(obj, 1), true);
     39      assertEq(Object.hasOwn(obj, 2), j < 13);
     40      assertEq(Object.hasOwn(obj, 3), j >= 13);
     41    }
     42  }
     43 }
     44 testBasic();
     45 
     46 function testNonNative() {
     47  var arr = [1, 2, 3];
     48  var proxy = new Proxy({}, {
     49    get(target, prop) { return 456; },
     50    has(target, prop) { return prop === "0"; },
     51  });
     52  for (var i = 0; i < 100; i++) {
     53    var obj = i < 95 ? arr : proxy;
     54    assertEq(obj[0], i < 95 ? 1 : 456);
     55    assertEq(0 in obj, true);
     56    assertEq(1 in obj, i < 95);
     57    assertEq(4 in obj, false);
     58    assertEq(Object.hasOwn(obj, 0), i < 95);
     59    assertEq(Object.hasOwn(obj, 1), i < 95);
     60    assertEq(Object.hasOwn(obj, 4), false);
     61  }
     62 }
     63 testNonNative();