tor-browser

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

fields-run-once-on-double-super.js (1118B)


      1 // Copyright (C) 2018 Kevin Gibbons. All rights reserved.
      2 // This code is governed by the BSD license found in the LICENSE file.
      3 /*---
      4 esid: sec-super-keyword-runtime-semantics-evaluation
      5 description: >
      6    when calling `super()` for a second time in a derived class, the super constructor is run twice but the field initializers are only run once
      7 info: |
      8    [...]
      9    6. Let result be ? Construct(func, argList, newTarget).
     10    [...]
     11    10. Perform ? thisER.BindThisValue(result).
     12    11. Perform ? InitializeInstanceFields(result, F).
     13    [...]
     14 features: [class-fields-public]
     15 ---*/
     16 
     17 
     18 var baseCtorCalled = 0;
     19 var fieldInitCalled = 0;
     20 class Base {
     21  constructor() {
     22    ++baseCtorCalled;
     23  }
     24 }
     25 
     26 var C = class extends Base {
     27  field = ++fieldInitCalled;
     28  constructor() {
     29    assert.sameValue(baseCtorCalled, 0);
     30    assert.sameValue(fieldInitCalled, 0);
     31    super();
     32    assert.sameValue(baseCtorCalled, 1);
     33    assert.sameValue(fieldInitCalled, 1);
     34    assert.throws(ReferenceError, () => super());
     35  }
     36 };
     37 
     38 new C();
     39 
     40 assert.sameValue(baseCtorCalled, 2);
     41 assert.sameValue(fieldInitCalled, 1);
     42 
     43 reportCompare(0, 0);