| Index: src/parser.cc
 | 
| diff --git a/src/parser.cc b/src/parser.cc
 | 
| index a7a31e7173593e67036cf4ffb9de14bb79f2e478..a954578f3677213eb6f6565323dde007a6803268 100644
 | 
| --- a/src/parser.cc
 | 
| +++ b/src/parser.cc
 | 
| @@ -1392,7 +1392,7 @@ Statement* Parser::ParseStatementListItem(bool* ok) {
 | 
|      case Token::VAR:
 | 
|        return ParseVariableStatement(kStatementListItem, NULL, ok);
 | 
|      case Token::LET:
 | 
| -      if (allow_let()) {
 | 
| +      if (IsNextLetKeyword()) {
 | 
|          return ParseVariableStatement(kStatementListItem, NULL, ok);
 | 
|        }
 | 
|        break;
 | 
| @@ -2639,9 +2639,6 @@ Statement* Parser::ParseExpressionOrLabelledStatement(
 | 
|        }
 | 
|        break;
 | 
|  
 | 
| -    // TODO(arv): Handle `let [`
 | 
| -    // https://code.google.com/p/v8/issues/detail?id=3847
 | 
| -
 | 
|      default:
 | 
|        break;
 | 
|    }
 | 
| @@ -3516,7 +3513,7 @@ Statement* Parser::ParseForStatement(ZoneList<const AstRawString*>* labels,
 | 
|    DeclarationParsingResult parsing_result;
 | 
|    if (peek() != Token::SEMICOLON) {
 | 
|      if (peek() == Token::VAR || (peek() == Token::CONST && allow_const()) ||
 | 
| -        (peek() == Token::LET && allow_let())) {
 | 
| +        (peek() == Token::LET && IsNextLetKeyword())) {
 | 
|        ParseVariableDeclarations(kForStatement, &parsing_result, CHECK_OK);
 | 
|        is_const = parsing_result.descriptor.mode == CONST;
 | 
|  
 | 
| 
 |