tor-browser

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

left-hand-side-private-reference-accessor-property-bitand.js (2138B)


      1 // This file was procedurally generated from the following sources:
      2 // - src/compound-assignment-private/bitand.case
      3 // - src/compound-assignment-private/default/getter-setter.template
      4 /*---
      5 description: Compound bitwise-and assignment with target being a private reference (to an accessor property with getter and setter)
      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      ...
     36      5.c. Let _setter_ be _entry_.[[Set]].
     37      d. Perform ? Call(_setter_, _O_, « _value_ »).
     38 
     39 ---*/
     40 
     41 
     42 class C {
     43  #setterCalledWith;
     44  get #field() {
     45    return 0b0101;
     46  }
     47  set #field(value) {
     48    this.#setterCalledWith = value;
     49  }
     50  compoundAssignment() {
     51    return this.#field &= 0b1010;
     52  }
     53  setterCalledWithValue() {
     54    return this.#setterCalledWith;
     55  }
     56 }
     57 
     58 const o = new C();
     59 assert.sameValue(o.compoundAssignment(), 0b0000, "The expression should evaluate to the result");
     60 assert.sameValue(o.setterCalledWithValue(), 0b0000, "PutValue should call the setter with the result");
     61 
     62 reportCompare(0, 0);