Skip to content

Commit e4f2d05

Browse files
committed
Move BindingPattern restriction for 'using' to an early error
1 parent 6eaf3ef commit e4f2d05

File tree

1 file changed

+26
-14
lines changed

1 file changed

+26
-14
lines changed

spec.html

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21278,23 +21278,23 @@ <h1>Let, Const, and Using Declarations</h1>
2127821278
<h2>Syntax</h2>
2127921279
<emu-grammar type="definition">
2128021280
LexicalDeclaration[In, Yield, Await] :
21281-
LetOrConst BindingList[?In, ?Yield, ?Await, ~Using] `;`
21281+
LetOrConst BindingList[?In, ?Yield, ?Await] `;`
2128221282
UsingDeclaration[?In, ?Yield, ?Await]
2128321283

2128421284
LetOrConst :
2128521285
`let`
2128621286
`const`
2128721287

2128821288
UsingDeclaration[In, Yield, Await] :
21289-
`using` [no LineTerminator here] [lookahead != `await`] BindingList[?In, ?Yield, ?Await, +Using] `;`
21289+
`using` [no LineTerminator here] [lookahead != `await`] BindingList[?In, ?Yield, ?Await] `;`
2129021290

21291-
BindingList[In, Yield, Await, Using] :
21292-
LexicalBinding[?In, ?Yield, ?Await, ?Using]
21293-
BindingList[?In, ?Yield, ?Await, ?Using] `,` LexicalBinding[?In, ?Yield, ?Await, ?Using]
21291+
BindingList[In, Yield, Await] :
21292+
LexicalBinding[?In, ?Yield, ?Await]
21293+
BindingList[?In, ?Yield, ?Await] `,` LexicalBinding[?In, ?Yield, ?Await]
2129421294

21295-
LexicalBinding[In, Yield, Await, Using] :
21295+
LexicalBinding[In, Yield, Await] :
2129621296
BindingIdentifier[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]?
21297-
[~Using] BindingPattern[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]
21297+
BindingPattern[?Yield, ?Await] Initializer[?In, ?Yield, ?Await]
2129821298
</emu-grammar>
2129921299

2130021300
<emu-clause id="sec-let-const-and-using-declarations-static-semantics-early-errors" oldids="sec-let-and-const-declarations-static-semantics-early-errors">
@@ -21329,6 +21329,12 @@ <h1>Static Semantics: Early Errors</h1>
2132921329
It is a Syntax Error if |Initializer| is not present and IsConstantDeclaration of the |LexicalDeclaration| containing this |LexicalBinding| is *true*.
2133021330
</li>
2133121331
</ul>
21332+
<emu-grammar>LexicalBinding : BindingPattern Initializer</emu-grammar>
21333+
<ul>
21334+
<li>
21335+
It is a Syntax Error IsUsingDeclaration of the |LexicalDeclaration| containing this |LexicalBinding| is *true*.
21336+
</li>
21337+
</ul>
2133221338
</emu-clause>
2133321339

2133421340
<emu-clause id="sec-let-const-and-using-declarations-runtime-semantics-evaluation" oldids="sec-let-and-const-declarations-runtime-semantics-evaluation" type="sdo">
@@ -21981,22 +21987,22 @@ <h2>Syntax</h2>
2198121987
<emu-grammar type="definition">
2198221988
ForInOfStatement[Yield, Await, Return] :
2198321989
`for` `(` [lookahead != `let` `[`] LeftHandSideExpression[?Yield, ?Await] `in` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
21984-
`for` `(` `var` ForBinding[?Yield, ?Await, ~Using] `in` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
21990+
`for` `(` `var` ForBinding[?Yield, ?Await] `in` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
2198521991
`for` `(` ForDeclaration[?Yield, ?Await, ~Using] `in` Expression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
2198621992
`for` `(` [lookahead &notin; { `let`, `async` `of` }] LeftHandSideExpression[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
21987-
`for` `(` `var` ForBinding[?Yield, ?Await, ~Using] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
21993+
`for` `(` `var` ForBinding[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
2198821994
`for` `(` [lookahead != `using` `of`] ForDeclaration[?Yield, ?Await, +Using] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
2198921995
[+Await] `for` `await` `(` [lookahead != `let`] LeftHandSideExpression[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
21990-
[+Await] `for` `await` `(` `var` ForBinding[?Yield, ?Await, ~Using] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
21996+
[+Await] `for` `await` `(` `var` ForBinding[?Yield, ?Await] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
2199121997
[+Await] `for` `await` `(` [lookahead != `using` `of`] ForDeclaration[?Yield, ?Await, +Using] `of` AssignmentExpression[+In, ?Yield, ?Await] `)` Statement[?Yield, ?Await, ?Return]
2199221998

2199321999
ForDeclaration[Yield, Await, Using] :
21994-
LetOrConst ForBinding[?Yield, ?Await, ~Using]
21995-
[+Using] `using` [no LineTerminator here] [lookahead != `await`] ForBinding[?Yield, ?Await, +Using]
22000+
LetOrConst ForBinding[?Yield, ?Await]
22001+
[+Using] `using` [no LineTerminator here] [lookahead != `await`] ForBinding[?Yield, ?Await]
2199622002

21997-
ForBinding[Yield, Await, Using] :
22003+
ForBinding[Yield, Await] :
2199822004
BindingIdentifier[?Yield, ?Await]
21999-
[~Using] BindingPattern[?Yield, ?Await]
22005+
BindingPattern[?Yield, ?Await]
2200022006
</emu-grammar>
2200122007
<emu-note>
2200222008
<p>This section is extended by Annex <emu-xref href="#sec-initializers-in-forin-statement-heads"></emu-xref>.</p>
@@ -22059,6 +22065,12 @@ <h1>Static Semantics: Early Errors</h1>
2205922065
It is a Syntax Error if the BoundNames of |ForDeclaration| contains any duplicate entries.
2206022066
</li>
2206122067
</ul>
22068+
<emu-grammar>ForBinding : BindingPattern</emu-grammar>
22069+
<ul>
22070+
<li>
22071+
It is a Syntax Error if this |ForBinding| is contained within a |ForDeclaration| and IsUsingDeclaration of that |ForDeclaration| is *true*.
22072+
</li>
22073+
</ul>
2206222074
</emu-clause>
2206322075

2206422076
<emu-clause id="sec-static-semantics-isdestructuring" oldids="sec-static-semantics-static-semantics-isdestructuring,sec-for-in-and-for-of-statements-static-semantics-isdestructuring" type="sdo">

0 commit comments

Comments
 (0)