OLD | NEW |
1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <cmath> | 5 #include <cmath> |
6 | 6 |
7 #include "src/allocation.h" | 7 #include "src/allocation.h" |
8 #include "src/base/logging.h" | 8 #include "src/base/logging.h" |
9 #include "src/conversions-inl.h" | 9 #include "src/conversions-inl.h" |
10 #include "src/conversions.h" | 10 #include "src/conversions.h" |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
167 // LetOrConst BindingList[?In, ?Yield] ; | 167 // LetOrConst BindingList[?In, ?Yield] ; |
168 | 168 |
169 switch (peek()) { | 169 switch (peek()) { |
170 case Token::FUNCTION: | 170 case Token::FUNCTION: |
171 return ParseFunctionDeclaration(ok); | 171 return ParseFunctionDeclaration(ok); |
172 case Token::CLASS: | 172 case Token::CLASS: |
173 return ParseClassDeclaration(ok); | 173 return ParseClassDeclaration(ok); |
174 case Token::CONST: | 174 case Token::CONST: |
175 return ParseVariableStatement(kStatementListItem, ok); | 175 return ParseVariableStatement(kStatementListItem, ok); |
176 case Token::LET: | 176 case Token::LET: |
177 DCHECK(allow_harmony_scoping()); | |
178 if (is_strict(language_mode())) { | 177 if (is_strict(language_mode())) { |
179 return ParseVariableStatement(kStatementListItem, ok); | 178 return ParseVariableStatement(kStatementListItem, ok); |
180 } | 179 } |
181 // Fall through. | 180 // Fall through. |
182 default: | 181 default: |
183 return ParseStatement(ok); | 182 return ParseStatement(ok); |
184 } | 183 } |
185 } | 184 } |
186 | 185 |
187 | 186 |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
376 | 375 |
377 PreParser::Statement PreParser::ParseBlock(bool* ok) { | 376 PreParser::Statement PreParser::ParseBlock(bool* ok) { |
378 // Block :: | 377 // Block :: |
379 // '{' Statement* '}' | 378 // '{' Statement* '}' |
380 | 379 |
381 // Note that a Block does not introduce a new execution scope! | 380 // Note that a Block does not introduce a new execution scope! |
382 // (ECMA-262, 3rd, 12.2) | 381 // (ECMA-262, 3rd, 12.2) |
383 // | 382 // |
384 Expect(Token::LBRACE, CHECK_OK); | 383 Expect(Token::LBRACE, CHECK_OK); |
385 while (peek() != Token::RBRACE) { | 384 while (peek() != Token::RBRACE) { |
386 if (allow_harmony_scoping() && is_strict(language_mode())) { | 385 if (is_strict(language_mode())) { |
387 ParseStatementListItem(CHECK_OK); | 386 ParseStatementListItem(CHECK_OK); |
388 } else { | 387 } else { |
389 ParseStatement(CHECK_OK); | 388 ParseStatement(CHECK_OK); |
390 } | 389 } |
391 } | 390 } |
392 Expect(Token::RBRACE, ok); | 391 Expect(Token::RBRACE, ok); |
393 return Statement::Default(); | 392 return Statement::Default(); |
394 } | 393 } |
395 | 394 |
396 | 395 |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
449 // | 448 // |
450 // * It is a Syntax Error if the code that matches this production is not | 449 // * It is a Syntax Error if the code that matches this production is not |
451 // contained in extended code. | 450 // contained in extended code. |
452 // | 451 // |
453 // However disallowing const in sloppy mode will break compatibility with | 452 // However disallowing const in sloppy mode will break compatibility with |
454 // existing pages. Therefore we keep allowing const with the old | 453 // existing pages. Therefore we keep allowing const with the old |
455 // non-harmony semantics in sloppy mode. | 454 // non-harmony semantics in sloppy mode. |
456 Consume(Token::CONST); | 455 Consume(Token::CONST); |
457 if (is_strict(language_mode())) { | 456 if (is_strict(language_mode())) { |
458 DCHECK(var_context != kStatement); | 457 DCHECK(var_context != kStatement); |
459 if (!allow_harmony_scoping()) { | |
460 Scanner::Location location = scanner()->peek_location(); | |
461 ReportMessageAt(location, "strict_const"); | |
462 *ok = false; | |
463 return Statement::Default(); | |
464 } | |
465 is_strict_const = true; | 458 is_strict_const = true; |
466 require_initializer = var_context != kForStatement; | 459 require_initializer = var_context != kForStatement; |
467 } | 460 } |
468 } else if (peek() == Token::LET && is_strict(language_mode())) { | 461 } else if (peek() == Token::LET && is_strict(language_mode())) { |
469 Consume(Token::LET); | 462 Consume(Token::LET); |
470 DCHECK(var_context != kStatement); | 463 DCHECK(var_context != kStatement); |
471 } else { | 464 } else { |
472 *ok = false; | 465 *ok = false; |
473 return Statement::Default(); | 466 return Statement::Default(); |
474 } | 467 } |
(...skipping 548 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1023 ParseIdentifier(kAllowEvalOrArguments, CHECK_OK); | 1016 ParseIdentifier(kAllowEvalOrArguments, CHECK_OK); |
1024 ParseArguments(ok); | 1017 ParseArguments(ok); |
1025 | 1018 |
1026 return Expression::Default(); | 1019 return Expression::Default(); |
1027 } | 1020 } |
1028 | 1021 |
1029 #undef CHECK_OK | 1022 #undef CHECK_OK |
1030 | 1023 |
1031 | 1024 |
1032 } } // v8::internal | 1025 } } // v8::internal |
OLD | NEW |