// Copyright (C) 2019 Kubilay Kahveci (Bloomberg LP). All rights reserved. // This code is governed by the BSD license found in the LICENSE file. /*--- desc: Private settters are installed "when super returns" and no earlier (call in field initializer) info: | SuperCall: super Arguments 1. Let newTarget be GetNewTarget(). 2. If newTarget is undefined, throw a ReferenceError exception. 3. Let func be ? GetSuperConstructor(). 4. Let argList be ArgumentListEvaluation of Arguments. 5. ReturnIfAbrupt(argList). 6. Let result be ? Construct(func, argList, newTarget). 7. Let thisER be GetThisEnvironment( ). 8. Let F be thisER.[[FunctionObject]]. 9. Assert: F is an ECMAScript function object. 10. Perform ? InitializeInstanceElements(result, F). EDITOR'S NOTE: Private fields are added to the object one by one, interspersed with evaluation of the initializers, following the construction of the receiver. These semantics allow for a later initializer to refer to a previous private field. template: default features: [class-methods-private, class-fields-public] ---*/ //- elements f = this.g(); //- assertions class D extends C { g() { this.#m = 42; } set #m(val) {} } assert(D.prototype.hasOwnProperty('g')); assert.throws(TypeError, function() { var d = new D(); }, 'private setters are not installed before super returns');