Chromium Code Reviews| Index: src/preparser.cc |
| diff --git a/src/preparser.cc b/src/preparser.cc |
| index cfb8a3e3d53525ac0255bbb68e4738ac75185411..08d322b7d9a2b4ceb577667ad874ef54b322d134 100644 |
| --- a/src/preparser.cc |
| +++ b/src/preparser.cc |
| @@ -192,15 +192,19 @@ PreParser::Statement PreParser::ParseStatementListItem(bool* ok) { |
| case Token::CLASS: |
| return ParseClassDeclaration(ok); |
| case Token::CONST: |
| - return ParseVariableStatement(kStatementListItem, ok); |
| + if (allow_const()) { |
| + return ParseVariableStatement(kStatementListItem, ok); |
| + } |
|
Dan Ehrenberg
2015/07/06 21:26:12
Error if allow_const is false?
arv (Not doing code reviews)
2015/07/06 21:35:24
ParseStatement will error.
|
| + break; |
| case Token::LET: |
| if (is_strict(language_mode())) { |
| return ParseVariableStatement(kStatementListItem, ok); |
| } |
| - // Fall through. |
| + break; |
| default: |
| - return ParseStatement(ok); |
| + break; |
| } |
| + return ParseStatement(ok); |
| } |
| @@ -392,7 +396,7 @@ PreParser::Statement PreParser::ParseSubStatement(bool* ok) { |
| // In ES6 CONST is not allowed as a Statement, only as a |
| // LexicalDeclaration, however we continue to allow it in sloppy mode for |
| // backwards compatibility. |
| - if (is_sloppy(language_mode())) { |
| + if (is_sloppy(language_mode()) && allow_legacy_const()) { |
| return ParseVariableStatement(kStatement, ok); |
| } |
| @@ -508,7 +512,7 @@ PreParser::Statement PreParser::ParseVariableDeclarations( |
| return Statement::Default(); |
| } |
| Consume(Token::VAR); |
| - } else if (peek() == Token::CONST) { |
| + } else if (peek() == Token::CONST && allow_const()) { |
| // TODO(ES6): The ES6 Draft Rev4 section 12.2.2 reads: |
| // |
| // ConstDeclaration : const ConstBinding (',' ConstBinding)* ';' |
| @@ -864,7 +868,7 @@ PreParser::Statement PreParser::ParseForStatement(bool* ok) { |
| bool is_let_identifier_expression = false; |
| if (peek() != Token::SEMICOLON) { |
| ForEachStatement::VisitMode mode; |
| - if (peek() == Token::VAR || peek() == Token::CONST || |
| + if (peek() == Token::VAR || (peek() == Token::CONST && allow_const()) || |
| (peek() == Token::LET && is_strict(language_mode()))) { |
| int decl_count; |
| Scanner::Location first_initializer_loc = Scanner::Location::invalid(); |