OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 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 "src/parsing/parser.h" | 5 #include "src/parsing/parser.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "src/api.h" | 9 #include "src/api.h" |
10 #include "src/ast/ast-expression-rewriter.h" | 10 #include "src/ast/ast-expression-rewriter.h" |
(...skipping 760 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
771 this->scope()->SetLanguageMode(info->language_mode()); | 771 this->scope()->SetLanguageMode(info->language_mode()); |
772 ParseStatementList(body, Token::EOS, &ok); | 772 ParseStatementList(body, Token::EOS, &ok); |
773 } | 773 } |
774 | 774 |
775 // The parser will peek but not consume EOS. Our scope logically goes all | 775 // The parser will peek but not consume EOS. Our scope logically goes all |
776 // the way to the EOS, though. | 776 // the way to the EOS, though. |
777 scope->set_end_position(scanner()->peek_location().beg_pos); | 777 scope->set_end_position(scanner()->peek_location().beg_pos); |
778 | 778 |
779 if (ok && is_strict(language_mode())) { | 779 if (ok && is_strict(language_mode())) { |
780 CheckStrictOctalLiteral(beg_pos, scanner()->location().end_pos, &ok); | 780 CheckStrictOctalLiteral(beg_pos, scanner()->location().end_pos, &ok); |
781 CheckDecimalLiteralWithLeadingZero(beg_pos, | |
782 scanner()->location().end_pos); | |
783 } | 781 } |
784 if (ok && is_sloppy(language_mode())) { | 782 if (ok && is_sloppy(language_mode())) { |
785 // TODO(littledan): Function bindings on the global object that modify | 783 // TODO(littledan): Function bindings on the global object that modify |
786 // pre-existing bindings should be made writable, enumerable and | 784 // pre-existing bindings should be made writable, enumerable and |
787 // nonconfigurable if possible, whereas this code will leave attributes | 785 // nonconfigurable if possible, whereas this code will leave attributes |
788 // unchanged if the property already exists. | 786 // unchanged if the property already exists. |
789 InsertSloppyBlockFunctionVarBindings(scope); | 787 InsertSloppyBlockFunctionVarBindings(scope); |
790 } | 788 } |
791 if (ok) { | 789 if (ok) { |
792 CheckConflictingVarDeclarations(scope, &ok); | 790 CheckConflictingVarDeclarations(scope, &ok); |
(...skipping 1943 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2736 | 2734 |
2737 // Validate function name. We can do this only after parsing the function, | 2735 // Validate function name. We can do this only after parsing the function, |
2738 // since the function can declare itself strict. | 2736 // since the function can declare itself strict. |
2739 language_mode = scope->language_mode(); | 2737 language_mode = scope->language_mode(); |
2740 CheckFunctionName(language_mode, function_name, function_name_validity, | 2738 CheckFunctionName(language_mode, function_name, function_name_validity, |
2741 function_name_location, CHECK_OK); | 2739 function_name_location, CHECK_OK); |
2742 | 2740 |
2743 if (is_strict(language_mode)) { | 2741 if (is_strict(language_mode)) { |
2744 CheckStrictOctalLiteral(scope->start_position(), scope->end_position(), | 2742 CheckStrictOctalLiteral(scope->start_position(), scope->end_position(), |
2745 CHECK_OK); | 2743 CHECK_OK); |
2746 CheckDecimalLiteralWithLeadingZero(scope->start_position(), | |
2747 scope->end_position()); | |
2748 } | 2744 } |
2749 CheckConflictingVarDeclarations(scope, CHECK_OK); | 2745 CheckConflictingVarDeclarations(scope, CHECK_OK); |
2750 } // DiscardableZoneScope goes out of scope. | 2746 } // DiscardableZoneScope goes out of scope. |
2751 | 2747 |
2752 FunctionLiteral::ParameterFlag duplicate_parameters = | 2748 FunctionLiteral::ParameterFlag duplicate_parameters = |
2753 has_duplicate_parameters ? FunctionLiteral::kHasDuplicateParameters | 2749 has_duplicate_parameters ? FunctionLiteral::kHasDuplicateParameters |
2754 : FunctionLiteral::kNoDuplicateParameters; | 2750 : FunctionLiteral::kNoDuplicateParameters; |
2755 | 2751 |
2756 // Note that the FunctionLiteral needs to be created in the main Zone again. | 2752 // Note that the FunctionLiteral needs to be created in the main Zone again. |
2757 FunctionLiteral* function_literal = factory()->NewFunctionLiteral( | 2753 FunctionLiteral* function_literal = factory()->NewFunctionLiteral( |
(...skipping 2688 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5446 | 5442 |
5447 return final_loop; | 5443 return final_loop; |
5448 } | 5444 } |
5449 | 5445 |
5450 #undef CHECK_OK | 5446 #undef CHECK_OK |
5451 #undef CHECK_OK_VOID | 5447 #undef CHECK_OK_VOID |
5452 #undef CHECK_FAILED | 5448 #undef CHECK_FAILED |
5453 | 5449 |
5454 } // namespace internal | 5450 } // namespace internal |
5455 } // namespace v8 | 5451 } // namespace v8 |
OLD | NEW |