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 "src/api.h" | 7 #include "src/api.h" |
8 #include "src/ast/ast.h" | 8 #include "src/ast/ast.h" |
9 #include "src/ast/ast-expression-rewriter.h" | 9 #include "src/ast/ast-expression-rewriter.h" |
10 #include "src/ast/ast-expression-visitor.h" | 10 #include "src/ast/ast-expression-visitor.h" |
(...skipping 899 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
910 } | 910 } |
911 | 911 |
912 scope->set_start_position(0); | 912 scope->set_start_position(0); |
913 | 913 |
914 // Enter 'scope' with the given parsing mode. | 914 // Enter 'scope' with the given parsing mode. |
915 ParsingModeScope parsing_mode_scope(this, parsing_mode); | 915 ParsingModeScope parsing_mode_scope(this, parsing_mode); |
916 AstNodeFactory function_factory(ast_value_factory()); | 916 AstNodeFactory function_factory(ast_value_factory()); |
917 FunctionState function_state(&function_state_, &scope_, scope, | 917 FunctionState function_state(&function_state_, &scope_, scope, |
918 kNormalFunction, &function_factory); | 918 kNormalFunction, &function_factory); |
919 | 919 |
920 // Don't count the mode in the use counters--give the program a chance | |
921 // to enable script/module-wide strict mode below. | |
922 scope_->SetLanguageMode(info->language_mode()); | |
923 ZoneList<Statement*>* body = new(zone()) ZoneList<Statement*>(16, zone()); | 920 ZoneList<Statement*>* body = new(zone()) ZoneList<Statement*>(16, zone()); |
924 bool ok = true; | 921 bool ok = true; |
925 int beg_pos = scanner()->location().beg_pos; | 922 int beg_pos = scanner()->location().beg_pos; |
926 if (info->is_module()) { | 923 if (info->is_module()) { |
927 ParseModuleItemList(body, &ok); | 924 ParseModuleItemList(body, &ok); |
928 } else { | 925 } else { |
| 926 // Don't count the mode in the use counters--give the program a chance |
| 927 // to enable script-wide strict mode below. |
| 928 scope_->SetLanguageMode(info->language_mode()); |
929 ParseStatementList(body, Token::EOS, &ok); | 929 ParseStatementList(body, Token::EOS, &ok); |
930 } | 930 } |
931 | 931 |
932 // The parser will peek but not consume EOS. Our scope logically goes all | 932 // The parser will peek but not consume EOS. Our scope logically goes all |
933 // the way to the EOS, though. | 933 // the way to the EOS, though. |
934 scope->set_end_position(scanner()->peek_location().beg_pos); | 934 scope->set_end_position(scanner()->peek_location().beg_pos); |
935 | 935 |
936 if (ok && is_strict(language_mode())) { | 936 if (ok && is_strict(language_mode())) { |
937 CheckStrictOctalLiteral(beg_pos, scanner()->location().end_pos, &ok); | 937 CheckStrictOctalLiteral(beg_pos, scanner()->location().end_pos, &ok); |
938 } | 938 } |
(...skipping 349 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1288 | 1288 |
1289 void* Parser::ParseModuleItemList(ZoneList<Statement*>* body, bool* ok) { | 1289 void* Parser::ParseModuleItemList(ZoneList<Statement*>* body, bool* ok) { |
1290 // (Ecma 262 6th Edition, 15.2): | 1290 // (Ecma 262 6th Edition, 15.2): |
1291 // Module : | 1291 // Module : |
1292 // ModuleBody? | 1292 // ModuleBody? |
1293 // | 1293 // |
1294 // ModuleBody : | 1294 // ModuleBody : |
1295 // ModuleItem* | 1295 // ModuleItem* |
1296 | 1296 |
1297 DCHECK(scope_->is_module_scope()); | 1297 DCHECK(scope_->is_module_scope()); |
1298 RaiseLanguageMode(STRICT); | |
1299 | 1298 |
1300 while (peek() != Token::EOS) { | 1299 while (peek() != Token::EOS) { |
1301 Statement* stat = ParseModuleItem(CHECK_OK); | 1300 Statement* stat = ParseModuleItem(CHECK_OK); |
1302 if (stat && !stat->IsEmpty()) { | 1301 if (stat && !stat->IsEmpty()) { |
1303 body->Add(stat, zone()); | 1302 body->Add(stat, zone()); |
1304 } | 1303 } |
1305 } | 1304 } |
1306 | 1305 |
1307 // Check that all exports are bound. | 1306 // Check that all exports are bound. |
1308 ModuleDescriptor* descriptor = scope_->module(); | 1307 ModuleDescriptor* descriptor = scope_->module(); |
(...skipping 5478 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6787 try_block, target); | 6786 try_block, target); |
6788 final_loop = target; | 6787 final_loop = target; |
6789 } | 6788 } |
6790 | 6789 |
6791 return final_loop; | 6790 return final_loop; |
6792 } | 6791 } |
6793 | 6792 |
6794 | 6793 |
6795 } // namespace internal | 6794 } // namespace internal |
6796 } // namespace v8 | 6795 } // namespace v8 |
OLD | NEW |