tor-browser

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

super-prop.js (1399B)


      1 class Y {
      2    a() {
      3        assertEq(this.__proto__, X.prototype);
      4        return 1;
      5    }
      6    b() {
      7        assertEq(this.__proto__, X.prototype);
      8        return 2;
      9    }
     10 }
     11 
     12 class X extends Y {
     13    a() { throw "not invoked"; }
     14    b() {
     15        return super.a() + super.b();
     16    }
     17    c(i) {
     18        var a, b;
     19 
     20        if (i % 2) {
     21            a = "a";
     22            b = "b"
     23        } else {
     24            a = "b";
     25            b = "a";
     26        }
     27 
     28        return super[a]() + super[b]();
     29    }
     30 }
     31 
     32 function simple() {
     33    var x = new X();
     34    assertEq(x.b(), 3);
     35    assertEq(x.c(), 3);
     36 }
     37 
     38 class A {
     39    b() { return 1;}
     40 }
     41 class B extends A {
     42    a() {
     43        assertEq(super.b(), 1);
     44    }
     45 }
     46 
     47 function nullHomeObjectSuperBase(i) {
     48    var b = new B();
     49    if (i == 500) {
     50        Object.setPrototypeOf(B.prototype, null);
     51        // Don't crash
     52    }
     53    b.a();
     54 }
     55 
     56 class SArray extends Array {
     57    constructor() {
     58        super("a", "b");
     59    }
     60 
     61    a() {
     62        assertEq(super.length, 0);
     63        assertEq(this.length, 2);
     64 
     65        assertEq(this[0], "a");
     66        assertEq(this[1], "b");
     67 
     68        assertEq(super[0], undefined);
     69        assertEq(super[1], undefined);
     70    }
     71 }
     72 
     73 function array() {
     74    var s = new SArray();
     75    s.a();
     76 }
     77 
     78 for (var i = 0; i < 1e4; i++) {
     79    simple();
     80    array();
     81 
     82    try {
     83        nullHomeObjectSuperBase(i);
     84    } catch (e) {
     85        assertEq(i >= 500, true);
     86    }
     87 }