Skip to content

Commit 18d3969

Browse files
committed
Normative: Add "Late Errors for Function Call Assignment Targets" to Annex B
1 parent b6b9fbe commit 18d3969

File tree

1 file changed

+32
-7
lines changed

1 file changed

+32
-7
lines changed

spec.html

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9980,7 +9980,7 @@ <h1>
99809980
</emu-clause>
99819981

99829982
<emu-clause id="sec-static-semantics-assignmenttargettype" oldids="sec-identifiers-static-semantics-assignmenttargettype,sec-identifiers-static-semantics-isvalidsimpleassignmenttarget,sec-semantics-static-semantics-assignmenttargettype,sec-semantics-static-semantics-isvalidsimpleassignmenttarget,sec-grouping-operator-static-semantics-assignmenttargettype,sec-grouping-operator-static-semantics-isvalidsimpleassignmenttarget,sec-static-semantics-static-semantics-assignmenttargettype,sec-static-semantics-static-semantics-isvalidsimpleassignmenttarget,sec-update-expressions-static-semantics-assignmenttargettype,sec-update-expressions-static-semantics-isvalidsimpleassignmenttarget,sec-unary-operators-static-semantics-assignmenttargettype,sec-unary-operators-static-semantics-isvalidsimpleassignmenttarget,sec-exp-operator-static-semantics-assignmenttargettype,sec-exp-operator-static-semantics-isvalidsimpleassignmenttarget,sec-multiplicative-operators-static-semantics-assignmenttargettype,sec-multiplicative-operators-static-semantics-isvalidsimpleassignmenttarget,sec-additive-operators-static-semantics-assignmenttargettype,sec-additive-operators-static-semantics-isvalidsimpleassignmenttarget,sec-bitwise-shift-operators-static-semantics-assignmenttargettype,sec-bitwise-shift-operators-static-semantics-isvalidsimpleassignmenttarget,sec-relational-operators-static-semantics-assignmenttargettype,sec-relational-operators-static-semantics-isvalidsimpleassignmenttarget,sec-equality-operators-static-semantics-assignmenttargettype,sec-equality-operators-static-semantics-isvalidsimpleassignmenttarget,sec-binary-bitwise-operators-static-semantics-assignmenttargettype,sec-binary-bitwise-operators-static-semantics-isvalidsimpleassignmenttarget,sec-binary-logical-operators-static-semantics-assignmenttargettype,sec-binary-logical-operators-static-semantics-isvalidsimpleassignmenttarget,sec-conditional-operator-static-semantics-assignmenttargettype,sec-conditional-operator-static-semantics-isvalidsimpleassignmenttarget,sec-assignment-operators-static-semantics-assignmenttargettype,sec-assignment-operators-static-semantics-isvalidsimpleassignmenttarget,sec-comma-operator-static-semantics-assignmenttargettype,sec-comma-operator-static-semantics-isvalidsimpleassignmenttarget" type="sdo">
9983-
<h1>Static Semantics: AssignmentTargetType ( ): ~simple~ or ~invalid~</h1>
9983+
<h1>Static Semantics: AssignmentTargetType ( ): ~simple~, ~web-compat~, or ~invalid~</h1>
99849984
<dl class="header">
99859985
</dl>
99869986
<emu-grammar>IdentifierReference : Identifier</emu-grammar>
@@ -10015,6 +10015,16 @@ <h1>Static Semantics: AssignmentTargetType ( ): ~simple~ or ~invalid~</h1>
1001510015
1. Let _expr_ be the |ParenthesizedExpression| that is covered by |CoverParenthesizedExpressionAndArrowParameterList|.
1001610016
1. Return the AssignmentTargetType of _expr_.
1001710017
</emu-alg>
10018+
<emu-grammar>
10019+
CallExpression :
10020+
CoverCallExpressionAndAsyncArrowHead
10021+
CallExpression Arguments
10022+
</emu-grammar>
10023+
<emu-alg>
10024+
1. [normative-optional] If the host is a web browser or otherwise supports <emu-xref href="#sec-late-errors-for-function-call-assignment-targets" title></emu-xref>, then
10025+
1. If IsStrict(this |CallExpression|) is *false*, return ~web-compat~.
10026+
1. Return ~invalid~.
10027+
</emu-alg>
1001810028
<emu-grammar>
1001910029
PrimaryExpression :
1002010030
`this`
@@ -10030,10 +10040,8 @@ <h1>Static Semantics: AssignmentTargetType ( ): ~simple~ or ~invalid~</h1>
1003010040
TemplateLiteral
1003110041

1003210042
CallExpression :
10033-
CoverCallExpressionAndAsyncArrowHead
1003410043
SuperCall
1003510044
ImportCall
10036-
CallExpression Arguments
1003710045
CallExpression TemplateLiteral
1003810046

1003910047
NewExpression :
@@ -19990,7 +19998,7 @@ <h1>Static Semantics: Early Errors</h1>
1999019998
</emu-grammar>
1999119999
<ul>
1999220000
<li>
19993-
It is an early Syntax Error if the AssignmentTargetType of |LeftHandSideExpression| is not ~simple~.
20001+
It is an early Syntax Error if the AssignmentTargetType of |LeftHandSideExpression| is ~invalid~.
1999420002
</li>
1999520003
</ul>
1999620004

@@ -20001,7 +20009,7 @@ <h1>Static Semantics: Early Errors</h1>
2000120009
</emu-grammar>
2000220010
<ul>
2000320011
<li>
20004-
It is an early Syntax Error if the AssignmentTargetType of |UnaryExpression| is not ~simple~.
20012+
It is an early Syntax Error if the AssignmentTargetType of |UnaryExpression| is ~invalid~.
2000520013
</li>
2000620014
</ul>
2000720015
</emu-clause>
@@ -20776,12 +20784,20 @@ <h1>Static Semantics: Early Errors</h1>
2077620784
If |LeftHandSideExpression| is either an |ObjectLiteral| or an |ArrayLiteral|, |LeftHandSideExpression| must cover an |AssignmentPattern|.
2077720785
</li>
2077820786
<li>
20779-
If |LeftHandSideExpression| is neither an |ObjectLiteral| nor an |ArrayLiteral|, it is a Syntax Error if the AssignmentTargetType of |LeftHandSideExpression| is not ~simple~.
20787+
If |LeftHandSideExpression| is neither an |ObjectLiteral| nor an |ArrayLiteral|, it is a Syntax Error if the AssignmentTargetType of |LeftHandSideExpression| is ~invalid~.
2078020788
</li>
2078120789
</ul>
2078220790
<emu-grammar>
2078320791
AssignmentExpression :
2078420792
LeftHandSideExpression AssignmentOperator AssignmentExpression
20793+
</emu-grammar>
20794+
<ul>
20795+
<li>
20796+
It is a Syntax Error if the AssignmentTargetType of |LeftHandSideExpression| is ~invalid~.
20797+
</li>
20798+
</ul>
20799+
<emu-grammar>
20800+
AssignmentExpression :
2078520801
LeftHandSideExpression `&amp;&amp;=` AssignmentExpression
2078620802
LeftHandSideExpression `||=` AssignmentExpression
2078720803
LeftHandSideExpression `??=` AssignmentExpression
@@ -22254,7 +22270,7 @@ <h1>Static Semantics: Early Errors</h1>
2225422270
If |LeftHandSideExpression| is either an |ObjectLiteral| or an |ArrayLiteral|, |LeftHandSideExpression| must cover an |AssignmentPattern|.
2225522271
</li>
2225622272
<li>
22257-
If |LeftHandSideExpression| is neither an |ObjectLiteral| nor an |ArrayLiteral|, it is a Syntax Error if the AssignmentTargetType of |LeftHandSideExpression| is not ~simple~.
22273+
If |LeftHandSideExpression| is neither an |ObjectLiteral| nor an |ArrayLiteral|, it is a Syntax Error if the AssignmentTargetType of |LeftHandSideExpression| is ~invalid~.
2225822274
</li>
2225922275
</ul>
2226022276
<emu-grammar>
@@ -52991,6 +53007,15 @@ <h1>Non-default behaviour in HostMakeJobCallback</h1>
5299153007
<h1>Non-default behaviour in HostEnsureCanAddPrivateElement</h1>
5299253008
<p>The HostEnsureCanAddPrivateElement abstract operation allows hosts which are web browsers to specify non-default behaviour.</p>
5299353009
</emu-annex>
53010+
53011+
<emu-annex id="sec-late-errors-for-function-call-assignment-targets">
53012+
<h1>Late Errors for Function Call Assignment Targets</h1>
53013+
<p>When a function call (<emu-xref href="#sec-function-calls"></emu-xref>) is used as an assignment target in non-strict code, instead of producing an early error, a *ReferenceError* exception may be thrown upon actually attempting the assignment.</p>
53014+
<emu-note>
53015+
<p>When the assignment target is the |LeftHandSideExpression| of an |AssignmentExpression|, the assignment operator must be `=` or an |AssignmentOperator|; in particular, the allowance here does not apply to the logical assignment operators (`??=`, `&&=`, `||=`) introduced in ECMAScript 2021.</p>
53016+
</emu-note>
53017+
<p>This feature augments the static semantics of AssignmentTargetType in <emu-xref href="#sec-static-semantics-assignmenttargettype"></emu-xref>.</p>
53018+
</emu-annex>
5299453019
</emu-annex>
5299553020
</emu-annex>
5299653021

0 commit comments

Comments
 (0)