private-setter-is-not-clobbered-by-computed-property.js (1314B)
1 // Copyright (C) 2019 Caio Lima (Igalia SL). All rights reserved. 2 // This code is governed by the BSD license found in the LICENSE file. 3 4 /*--- 5 description: Private setter is not clobbered by computed property 6 esid: sec-privatefieldget 7 info: | 8 PrivateFieldGet (P, O) 9 1. Assert: P is a Private Name. 10 2. If O is not an object, throw a TypeError exception. 11 3. If P.[[Kind]] is "field", 12 a. Let entry be PrivateFieldFind(P, O). 13 b. If entry is empty, throw a TypeError exception. 14 c. Return entry.[[PrivateFieldValue]]. 15 4. Perform ? PrivateBrandCheck(O, P). 16 5. If P.[[Kind]] is "method", 17 a. Return P.[[Value]]. 18 6. Else, 19 a. Assert: P.[[Kind]] is "accessor". 20 b. If P does not have a [[Get]] field, throw a TypeError exception. 21 c. Let getter be P.[[Get]]. 22 d. Return ? Call(getter, O). 23 features: [class-methods-private, class-fields-public, class] 24 ---*/ 25 26 class C { 27 set #m(v) { this._v = v; } 28 ["#m"] = 0; 29 30 checkPrivateSetter() { 31 assert.sameValue(this.hasOwnProperty("#m"), true); 32 assert.sameValue("#m" in this, true); 33 34 assert.sameValue(this["#m"], 0); 35 36 this.#m = "Test262"; 37 assert.sameValue(this._v, "Test262"); 38 39 return 0; 40 } 41 } 42 43 let c = new C(); 44 assert.sameValue(c.checkPrivateSetter(), 0); 45 46 reportCompare(0, 0);