Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(315)

Unified Diff: src/parsing/parser.cc

Issue 2661933003: [ESnext] Parse dynamic import expression (Closed)
Patch Set: review fixes Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/parsing/parser.cc
diff --git a/src/parsing/parser.cc b/src/parsing/parser.cc
index 36268493e971ae185e2f88b5254cc5a88a7dde70..07a2479bf12fb57cdef972d79bb62adc9d066c13 100644
--- a/src/parsing/parser.cc
+++ b/src/parsing/parser.cc
@@ -553,6 +553,7 @@ Parser::Parser(ParseInfo* info)
set_allow_harmony_trailing_commas(FLAG_harmony_trailing_commas);
set_allow_harmony_class_fields(FLAG_harmony_class_fields);
set_allow_harmony_object_rest_spread(FLAG_harmony_object_rest_spread);
+ set_allow_harmony_dynamic_import(FLAG_harmony_dynamic_import);
for (int feature = 0; feature < v8::Isolate::kUseCounterFeatureCount;
++feature) {
use_counts_[feature] = 0;
@@ -962,15 +963,24 @@ Statement* Parser::ParseModuleItem(bool* ok) {
// ExportDeclaration
// StatementListItem
- switch (peek()) {
- case Token::IMPORT:
- ParseImportDeclaration(CHECK_OK);
- return factory()->NewEmptyStatement(kNoSourcePosition);
- case Token::EXPORT:
- return ParseExportDeclaration(ok);
- default:
+ Token::Value next = peek();
+
+ if (next == Token::IMPORT) {
+ // This makes sure we don't parse a dynamic import expression as
+ // an import declaration.
+ if (allow_harmony_dynamic_import() && PeekAhead() == Token::LPAREN) {
return ParseStatementListItem(ok);
+ }
+
+ ParseImportDeclaration(CHECK_OK);
+ return factory()->NewEmptyStatement(kNoSourcePosition);
+ }
+
+ if (next == Token::EXPORT) {
+ return ParseExportDeclaration(ok);
}
+
+ return ParseStatementListItem(ok);
}
neis 2017/01/31 10:47:57 Nit: I find this version a little nicer as it does
gsathya 2017/01/31 18:26:07 I did this initially and found the if conditional
@@ -2792,6 +2802,7 @@ Parser::LazyParsingResult Parser::SkipFunction(
SET_ALLOW(harmony_trailing_commas);
SET_ALLOW(harmony_class_fields);
SET_ALLOW(harmony_object_rest_spread);
+ SET_ALLOW(harmony_dynamic_import);
#undef SET_ALLOW
}
// Aborting inner function preparsing would leave scopes in an inconsistent
« no previous file with comments | « src/flag-definitions.h ('k') | src/parsing/parser-base.h » ('j') | src/parsing/parser-base.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698