Chromium Code Reviews| Index: src/preparser.cc |
| diff --git a/src/preparser.cc b/src/preparser.cc |
| index 987900a20d5844ebfef3e17d93fcd4c43f9503ea..7b781397c9ff0268b23e7eee8a36085f3a8c8a07 100644 |
| --- a/src/preparser.cc |
| +++ b/src/preparser.cc |
| @@ -409,6 +409,7 @@ PreParser::Statement PreParser::ParseVariableDeclarations( |
| // ConstBinding :: |
| // BindingPattern '=' AssignmentExpression |
| bool require_initializer = false; |
| + bool is_strict_const = false; |
| if (peek() == Token::VAR) { |
| Consume(Token::VAR); |
| } else if (peek() == Token::CONST) { |
| @@ -430,7 +431,8 @@ PreParser::Statement PreParser::ParseVariableDeclarations( |
| *ok = false; |
| return Statement::Default(); |
| } |
| - require_initializer = true; |
| + is_strict_const = true; |
| + require_initializer = var_context != kForStatement; |
| } else { |
| Scanner::Location location = scanner()->peek_location(); |
| ReportMessageAt(location, "strict_const"); |
| @@ -460,7 +462,8 @@ PreParser::Statement PreParser::ParseVariableDeclarations( |
| if (nvars > 0) Consume(Token::COMMA); |
| ParseIdentifier(kDontAllowEvalOrArguments, CHECK_OK); |
| nvars++; |
| - if (peek() == Token::ASSIGN || require_initializer) { |
| + if (peek() == Token::ASSIGN || require_initializer || |
| + (is_strict_const && peek() == Token::COMMA)) { |
|
rossberg
2014/10/23 09:44:54
I don't understand this condition. If it is true,
Dmitry Lomov (no reviews)
2014/10/23 10:33:34
Yes, intentional. Comment added.
|
| Expect(Token::ASSIGN, CHECK_OK); |
| ParseAssignmentExpression(var_context != kForStatement, CHECK_OK); |
| if (decl_props != NULL) *decl_props = kHasInitializers; |
| @@ -678,13 +681,16 @@ PreParser::Statement PreParser::ParseForStatement(bool* ok) { |
| if (peek() != Token::SEMICOLON) { |
| if (peek() == Token::VAR || peek() == Token::CONST || |
| (peek() == Token::LET && strict_mode() == STRICT)) { |
| - bool is_let = peek() == Token::LET; |
| + bool is_let_or_strict_const = |
|
rossberg
2014/10/23 09:44:54
Nit: how about naming this 'is_lexical'?
Dmitry Lomov (no reviews)
2014/10/23 10:33:34
Done.
|
| + peek() == Token::LET || |
| + (peek() == Token::CONST && strict_mode() == STRICT); |
| int decl_count; |
| VariableDeclarationProperties decl_props = kHasNoInitializers; |
| ParseVariableDeclarations( |
| kForStatement, &decl_props, &decl_count, CHECK_OK); |
| bool has_initializers = decl_props == kHasInitializers; |
| - bool accept_IN = decl_count == 1 && !(is_let && has_initializers); |
| + bool accept_IN = |
| + decl_count == 1 && !(is_let_or_strict_const && has_initializers); |
| bool accept_OF = !has_initializers; |
| if (accept_IN && CheckInOrOf(accept_OF)) { |
| ParseExpression(true, CHECK_OK); |