tor-browser

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

left-hand-side-private-reference-readonly-accessor-property-rshift.js (1838B)


      1 // This file was procedurally generated from the following sources:
      2 // - src/compound-assignment-private/rshift.case
      3 // - src/compound-assignment-private/default/getter.template
      4 /*---
      5 description: Compound right-shift assignment with target being a private reference (to an accessor property with getter)
      6 esid: sec-assignment-operators-runtime-semantics-evaluation
      7 features: [class-fields-private]
      8 flags: [generated]
      9 info: |
     10    sec-assignment-operators-runtime-semantics-evaluation
     11    AssignmentExpression : LeftHandSideExpression AssignmentOperator AssignmentExpression
     12      1. Let _lref_ be the result of evaluating |LeftHandSideExpression|.
     13      2. Let _lval_ be ? GetValue(_lref_).
     14      ...
     15      7. Let _r_ be ApplyStringOrNumericBinaryOperator(_lval_, _opText_, _rval_).
     16      8. Perform ? PutValue(_lref_, _r_).
     17      9. Return _r_.
     18 
     19    sec-property-accessors-runtime-semantics-evaluation
     20    MemberExpression : MemberExpression `.` PrivateIdentifier
     21 
     22      1. Let _baseReference_ be the result of evaluating |MemberExpression|.
     23      2. Let _baseValue_ be ? GetValue(_baseReference_).
     24      3. Let _fieldNameString_ be the StringValue of |PrivateIdentifier|.
     25      4. Return ! MakePrivateReference(_baseValue_, _fieldNameString_).
     26 
     27    PutValue (V, W)
     28      ...
     29      5.b. If IsPrivateReference(_V_) is *true*, then
     30        i. Return ? PrivateSet(_baseObj_, _V_.[[ReferencedName]], _W_).
     31 
     32    PrivateSet (O, P, value)
     33      ...
     34      5.a. Assert: _entry_.[[Kind]] is ~accessor~.
     35      b. If _entry_.[[Set]] is *undefined*, throw a *TypeError* exception.
     36 
     37 ---*/
     38 
     39 
     40 class C {
     41  get #field() {
     42    return 1;
     43  }
     44  compoundAssignment() {
     45    return this.#field >>>= 1;
     46  }
     47 }
     48 
     49 const o = new C();
     50 assert.throws(TypeError, () => o.compoundAssignment(), "PutValue throws when storing the result if no setter");
     51 
     52 reportCompare(0, 0);