tor-browser

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

megamorphic-invalidate.js (1632B)


      1 setJitCompilerOption("ic.force-megamorphic", 1);
      2 
      3 function testAddToIntermediate() {
      4  var C = Object.create(null);
      5  var B = Object.create(C);
      6  var A = Object.create(B);
      7  C.x = 1;
      8  for (var i = 0; i < 50; i++) {
      9    assertEq(A.x, i <= 45 ? 1 : 0);
     10    if (i === 45) {
     11      B.x = 0;
     12    }
     13  }
     14 }
     15 for (var i = 0; i < 5; i++) {
     16  testAddToIntermediate();
     17 }
     18 
     19 function testAddToReceiver() {
     20  var C = Object.create(null);
     21  var B = Object.create(C);
     22  var A = Object.create(B);
     23  C.x = 1;
     24  for (var i = 0; i < 50; i++) {
     25    assertEq(A.x, i <= 45 ? 1 : 0);
     26    if (i === 45) {
     27      A.x = 0;
     28    }
     29  }
     30 }
     31 for (var i = 0; i < 5; i++) {
     32  testAddToReceiver();
     33 }
     34 
     35 function testDelete() {
     36  var C = Object.create(null);
     37  var B = Object.create(C);
     38  var A = Object.create(B);
     39  C.x = 1;
     40  for (var i = 0; i < 50; i++) {
     41    assertEq(A.x, i <= 45 ? 1 : undefined);
     42    if (i === 45) {
     43      delete C.x;
     44    }
     45  }
     46 }
     47 for (var i = 0; i < 5; i++) {
     48  testDelete();
     49 }
     50 
     51 function testDataToAccessor() {
     52  var C = Object.create(null);
     53  var B = Object.create(C);
     54  var A = Object.create(B);
     55  C.x = 1;
     56  for (var i = 0; i < 50; i++) {
     57    assertEq(A.x, i <= 45 ? 1 : 7);
     58    if (i === 45) {
     59      Object.defineProperty(C, "x", {get: () => 7});
     60    }
     61  }
     62 }
     63 for (var i = 0; i < 5; i++) {
     64  testDataToAccessor();
     65 }
     66 
     67 function testProtoChange() {
     68  var C = Object.create(null);
     69  var B = Object.create(C);
     70  var A = Object.create(B);
     71  C.x = 1;
     72  for (var i = 0; i < 50; i++) {
     73    assertEq(A.x, i <= 45 ? 1 : 8);
     74    if (i === 45) {
     75      Object.setPrototypeOf(B, {a: 0, b: 1, x: 8});
     76    }
     77  }
     78 }
     79 for (var i = 0; i < 5; i++) {
     80  testProtoChange();
     81 }