tor-browser

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

superPropMegamorphic.js (1062B)


      1 // Test GETPROP_SUPER with megamorphic variation
      2 const NCLASS = 20;
      3 
      4 var g_prop = "prop";
      5 var g_THIS = "THIS";
      6 
      7 // Define array of base classes with a data property and a getter property.
      8 let C = [];
      9 for (let i = 0; i < NCLASS; ++i) {
     10    let klass = class {
     11        get THIS() { return this; }
     12    };
     13    klass.prototype.prop = i;
     14 
     15    C.push(klass);
     16 }
     17 
     18 // Derive class using super property access
     19 class D extends C[0] {
     20    get prop() { return super.prop; }
     21    get elem() { return super[g_prop]; }
     22 
     23    get prop_this() { return super.THIS; }
     24    get elem_this() { return super[g_THIS]; }
     25 }
     26 
     27 let d = new D();
     28 
     29 for (var j = 0; j < 4; ++j) {
     30    for (var i = 0; i < 15; ++i) {
     31        // Change base class by overriding [[HomeObject]].[[Prototype]]
     32        Object.setPrototypeOf(D.prototype, C[j].prototype);
     33 
     34        // Check we get property of correct class
     35        assertEq(d.prop, j);
     36        assertEq(d.elem, j);
     37 
     38        // Check super getter gets |this| of object not base class
     39        assertEq(d.prop_this, d);
     40        assertEq(d.elem_this, d);
     41    }
     42 }