Skip to content

Commit

Permalink
Normative: add #x in obj syntax (tc39#2290)
Browse files Browse the repository at this point in the history
  • Loading branch information
ljharb committed Apr 27, 2021
1 parent cf6c2cb commit da72c39
Showing 1 changed file with 29 additions and 0 deletions.
29 changes: 29 additions & 0 deletions spec.html
Original file line number Diff line number Diff line change
Expand Up @@ -7818,6 +7818,7 @@ <h1>Static Semantics: IsFunctionDefinition</h1>
RelationalExpression `&gt;=` ShiftExpression
RelationalExpression `instanceof` ShiftExpression
RelationalExpression `in` ShiftExpression
PrivateIdentifier `in` ShiftExpression

EqualityExpression :
EqualityExpression `==` RelationalExpression
Expand Down Expand Up @@ -8562,6 +8563,7 @@ <h1>Static Semantics: AssignmentTargetType</h1>
RelationalExpression `&gt;=` ShiftExpression
RelationalExpression `instanceof` ShiftExpression
RelationalExpression `in` ShiftExpression
PrivateIdentifier `in` ShiftExpression

EqualityExpression :
EqualityExpression `==` RelationalExpression
Expand Down Expand Up @@ -17188,6 +17190,7 @@ <h2>Syntax</h2>
RelationalExpression[?In, ?Yield, ?Await] `&gt;=` ShiftExpression[?Yield, ?Await]
RelationalExpression[?In, ?Yield, ?Await] `instanceof` ShiftExpression[?Yield, ?Await]
[+In] RelationalExpression[+In, ?Yield, ?Await] `in` ShiftExpression[?Yield, ?Await]
[+In] PrivateIdentifier `in` ShiftExpression[?Yield, ?Await]
</emu-grammar>
<emu-note>
<p>The <sub>[In]</sub> grammar parameter is needed to avoid confusing the `in` operator in a relational expression with the `in` operator in a `for` statement.</p>
Expand Down Expand Up @@ -17252,6 +17255,23 @@ <h1>Runtime Semantics: Evaluation</h1>
1. If Type(_rval_) is not Object, throw a *TypeError* exception.
1. Return ? HasProperty(_rval_, ? ToPropertyKey(_lval_)).
</emu-alg>
<emu-grammar>RelationalExpression : PrivateIdentifier `in` ShiftExpression</emu-grammar>
<emu-alg>
1. Let _privateIdentifier_ be the StringValue of |PrivateIdentifier|.
1. Let _rref_ be the result of evaluating |ShiftExpression|.
1. Let _rval_ be ? GetValue(_rref_).
1. If Type(_rval_) is not Object, throw a *TypeError* exception.
1. Let _env_ be the running execution context's PrivateEnvironment.
1. Let _privateNameBinding_ be ? ResolveBinding(_privateIdentifier_, _env_).
1. Let _privateName_ be ? GetValue(_privateNameBinding_).
1. Assert: _privateName_ is a Private Name.
1. If _privateName_.[[Kind]] is *"field"*, then
1. If ! PrivateFieldFind(_privateName_, _rval_) is not ~empty~, return *true*.
1. Else,
1. Assert: _privateName_.[[Kind]] is *"method"* or *"accessor"*.
1. If PrivateBrandCheck(_rval_, _privateName_) is not an abrupt completion, return *true*.
1. Return *false*.
</emu-alg>
</emu-clause>

<emu-clause id="sec-instanceofoperator" aoid="InstanceofOperator">
Expand Down Expand Up @@ -21307,6 +21327,14 @@ <h1>Static Semantics: AllPrivateIdentifiersValid</h1>
1. Append to _newNames_ the elements of PrivateBoundIdentifiers of |ClassBody|.
1. Return AllPrivateIdentifiersValid of |ClassElementList| with argument _newNames_.
</emu-alg>

<emu-grammar>RelationalExpression : PrivateIdentifier `in` ShiftExpression</emu-grammar>
<emu-alg>
1. If StringValue of |PrivateIdentifier| is in _names_, return *true*.
1. Return *false*.
</emu-alg>

<p>For all other grammatical productions, recurse on subexpressions/substatements, passing in the _names_ of the caller. If all pieces return *true*, then return *true*. If any returns *false*, return *false*.</p>
</emu-clause>

<emu-clause id="sec-class-definitions-static-semantics-privateboundidentifiers" type="sdo" aoid="PrivateBoundIdentifiers">
Expand Down Expand Up @@ -22158,6 +22186,7 @@ <h1>Expression Rules</h1>
RelationalExpression `&gt;=` ShiftExpression
RelationalExpression `instanceof` ShiftExpression
RelationalExpression `in` ShiftExpression
PrivateIdentifier `in` ShiftExpression

ShiftExpression :
ShiftExpression `&lt;&lt;` AdditiveExpression
Expand Down

0 comments on commit da72c39

Please sign in to comment.