tor-browser

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

setelem-id-guard.js (1959B)


      1 function setSlot() {
      2    var o = {x: 1, y: 2};
      3    for (var i=0; i<100; i++) {
      4        var p = (i & 1) ? "x" : "y";
      5        o[p] = i;
      6        assertEq((i & 1) ? o.x : o.y, i);
      7    }
      8 }
      9 setSlot();
     10 
     11 function setUnboxed() {
     12    var arr = [];
     13    for (var i=0; i<100; i++)
     14        arr.push({x: 1, y: 2});
     15 
     16    for (var i=0; i<100; i++) {
     17        var o = arr[i];
     18        var p = (i & 1) ? "x" : "y";
     19        o[p] = i;
     20        assertEq((i & 1) ? o.x : o.y, i);
     21    }
     22 }
     23 setUnboxed();
     24 
     25 function setUnboxedExpando() {
     26    var arr = [];
     27    for (var i=0; i<100; i++)
     28        arr.push({x: 1, y: 2});
     29 
     30    for (var i=0; i<100; i++) {
     31        var o = arr[i];
     32        o.a = 1;
     33        o.b = 2;
     34        var p = (i & 1) ? "a" : "b";
     35        o[p] = i;
     36        o[p] = o[p] + 4;
     37        assertEq((i & 1) ? o.a : o.b, i + 4);
     38    }
     39 }
     40 setUnboxedExpando();
     41 
     42 function setArrayLength() {
     43    var arr = [];
     44    for (var i=0; i<100; i++) {
     45        var p = (i & 1) ? "length" : "x";
     46        arr[p] = i;
     47        assertEq((i & 1) ? arr.length : arr.x, i);
     48    }
     49 }
     50 setArrayLength();
     51 
     52 function setter() {
     53    var c = 0;
     54    var o = {set x(i) { c += i; }, set y(i) { c += i + 2; }};
     55    for (var i=0; i<100; i++) {
     56        var p = (i & 1) ? "x" : "y";
     57        o[p] = i;
     58    }
     59    assertEq(c, 5050);
     60 }
     61 setter();
     62 
     63 function addSlot() {
     64    for (var i=0; i<100; i++) {
     65        var o = {};
     66        var p1 = (i & 1) ? "x" : "y";
     67        var p2 = (i % 3) ? "a" : "b";
     68        o[p1] = i;
     69        o[p2] = i;
     70        assertEq((i & 1) ? o.x : o.y, i);
     71        assertEq((i % 3) ? o.a : o.b, i);
     72    }
     73 }
     74 addSlot();
     75 
     76 function addExpandoSlot() {
     77    var arr = [];
     78    for (var i=0; i<100; i++)
     79        arr.push({c: 1, d: 2});
     80 
     81    for (var i=0; i<100; i++) {
     82        var o = arr[i];
     83        var p1 = (i & 1) ? "x" : "y";
     84        var p2 = (i % 3) ? "a" : "b";
     85        o[p1] = i;
     86        o[p2] = i;
     87        assertEq((i & 1) ? o.x : o.y, i);
     88        assertEq((i % 3) ? o.a : o.b, i);
     89    }
     90 }
     91 addExpandoSlot();