-
Notifications
You must be signed in to change notification settings - Fork 776
Closed
Description
Syntax:
Per Rev 32 (Feb 2, 2015) of the draft spec, the relevant grammar is on Section 13.2.1 on Let and Const Declarations:
LexicalDeclaration[In, Yield] :
LetOrConst BindingList[?In, ?Yield] ;
LetOrConst :
let
const
BindingList[In, Yield] :
LexicalBinding[?In, ?Yield]
BindingList[?In, ?Yield] , LexicalBinding[?In, ?Yield]
LexicalBinding[In, Yield] :
BindingIdentifier[?Yield] Initializer[?In, ?Yield]opt
BindingPattern[?Yield] Initializer[?In, ?Yield]
Referred to by:
Declaration:
Declaration[Yield] :
HoistableDeclaration _[?Yield]
ClassDeclaration[?Yield]
LexicalDeclaration[In, ?Yield]
StatementListItem:
StatementListItem[Yield, Return] :
Statement[?Yield, ?Return]
Declaration[?Yield]
Iteration:
for ( LexicalDeclaration[?Yield] Expression[In, ?Yield]opt ; Expression[In, ?Yield]opt ) Statement[?Yield, ?Return]
for ( ForDeclaration[?Yield] in Expression[In, ?Yield] ) Statement[?Yield, ?Return]
whereas:
ForDeclaration[Yield] :
LetOrConst ForBinding[?Yield]
ForBinding[Yield] :
BindingIdentifier[?Yield]
BindingPattern[?Yield]
Early errors:
- const without initializer:
const x;(from Esprima 1.x) - for-in with multiple let identifiers:
for (let x,y in z){} - for-in with multiple const identifiers:
for (const x,y in z){} - for-in with let initializer:
for (let i = 1 in x){} - for-in with const initializer:
for (const i = 1 in x){}- More TBD
Spec:
13.2.1 Let and Const Declarations.
Relevant AST interfaces (from https://github.com/estree/estree):
interface VariableDeclaration <: Declaration {
type: "VariableDeclaration";
declarations: [ VariableDeclarator ];
kind: "var";
}extend interface VariableDeclaration {
kind: "var" | "let" | "const";
}See also
- Error messages in V8
- Harmony branch: switch case accepting declaration
Note that V8 doesn't yet support various early errors for lexical declarations. In the mean time, we may need to use the generic Unexpected token... message for such an error.
Reactions are currently unavailable