tor-browser

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

iterator-indices-3.js (1686B)


      1 function test(o, deleter) {
      2  var result = 0;
      3  for (var s in o) {
      4    if (!o.hasOwnProperty(s)) { continue; }
      5    result += o[s];
      6    deleter(o);
      7  }
      8  return result;
      9 }
     10 
     11 function test2(o, deleter) {
     12  var result = 0;
     13  var keys = Object.keys(o);
     14  for (var i = 0; i < keys.length; i++) {
     15    var s = keys[i];
     16    if (!o.hasOwnProperty(s)) { continue; }
     17    result += o[s];
     18    deleter(o);
     19  }
     20  return result;
     21 }
     22 
     23 with ({}) {}
     24 
     25 // Ion-compile |test| with a megamorphic getprop and a generic call.
     26 for (var i = 0; i < 2000; i++) {
     27  var obj = {};
     28  obj["x" + i] = 1;
     29  test(obj, () => 1);
     30  test(obj, () => 2);
     31  test2(obj, () => 1);
     32  test2(obj, () => 2);
     33 }
     34 
     35 assertEq(test({x: 1, y: 2}, (o) => delete o.y), 1);
     36 assertEq(test([1,2], (o) => delete o[1]), 1);
     37 assertEq(test([1,2], (o) => {o.length = 0}), 1);
     38 
     39 assertEq(test({x: 1, y: 2, z: 3}, (o) => delete o.y), 4);
     40 assertEq(test([1,2,3], (o) => delete o[1]), 4);
     41 assertEq(test([1,2,3,4], (o) => {o.length = 2}), 3);
     42 assertEq(test([,2,3], (o) => o.reverse()), 2);
     43 
     44 assertEq(test({x: 1, y: 2, z: 3}, (o) => delete o.x), 6);
     45 assertEq(test([1,2,3], (o) => delete o[0]), 6);
     46 assertEq(test([1], (o) => {o.length = 0}), 1);
     47 
     48 assertEq(test2({x: 1, y: 2}, (o) => delete o.y), 1);
     49 assertEq(test2([1,2], (o) => delete o[1]), 1);
     50 assertEq(test2([1,2], (o) => {o.length = 0}), 1);
     51 
     52 assertEq(test2({x: 1, y: 2, z: 3}, (o) => delete o.y), 4);
     53 assertEq(test2([1,2,3], (o) => delete o[1]), 4);
     54 assertEq(test2([1,2,3,4], (o) => {o.length = 2}), 3);
     55 assertEq(test2([,2,3], (o) => o.reverse()), 2);
     56 
     57 assertEq(test2({x: 1, y: 2, z: 3}, (o) => delete o.x), 6);
     58 assertEq(test2([1,2,3], (o) => delete o[0]), 6);
     59 assertEq(test2([1], (o) => {o.length = 0}), 1);