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

Unified Diff: src/parsing/parser.cc

Issue 1808373003: Implement ES2015 labelled function declaration restrictions (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Created 4 years, 9 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 12666fe8ef4fe5ecbe715897dc6de69ff7644816..d1ea614b56ad75107d8990c714c021bf40ed3005 100644
--- a/src/parsing/parser.cc
+++ b/src/parsing/parser.cc
@@ -1261,7 +1261,7 @@ Statement* Parser::ParseStatementListItem(bool* ok) {
default:
break;
}
- return ParseStatement(NULL, ok);
+ return ParseStatement(NULL, kAllowLabelledFunctionStatement, ok);
}
@@ -1711,9 +1711,10 @@ Statement* Parser::ParseExportDeclaration(bool* ok) {
return result;
}
-
-Statement* Parser::ParseStatement(ZoneList<const AstRawString*>* labels,
- bool* ok) {
+Statement* Parser::ParseStatement(
+ ZoneList<const AstRawString*>* labels,
+ AllowLabelledFunctionStatement allow_labelled_function_statement,
+ bool* ok) {
// Statement ::
// EmptyStatement
// ...
@@ -1722,12 +1723,13 @@ Statement* Parser::ParseStatement(ZoneList<const AstRawString*>* labels,
Next();
return factory()->NewEmptyStatement(RelocInfo::kNoPosition);
}
- return ParseSubStatement(labels, ok);
+ return ParseSubStatement(labels, allow_labelled_function_statement, ok);
}
-
-Statement* Parser::ParseSubStatement(ZoneList<const AstRawString*>* labels,
- bool* ok) {
+Statement* Parser::ParseSubStatement(
+ ZoneList<const AstRawString*>* labels,
+ AllowLabelledFunctionStatement allow_labelled_function_statement,
+ bool* ok) {
// Statement ::
// Block
// VariableStatement
@@ -1825,7 +1827,8 @@ Statement* Parser::ParseSubStatement(ZoneList<const AstRawString*>* labels,
// Fall through.
default:
- return ParseExpressionOrLabelledStatement(labels, ok);
+ return ParseExpressionOrLabelledStatement(
+ labels, allow_labelled_function_statement, ok);
}
}
@@ -2426,9 +2429,10 @@ static bool ContainsLabel(ZoneList<const AstRawString*>* labels,
return false;
}
-
Statement* Parser::ParseExpressionOrLabelledStatement(
- ZoneList<const AstRawString*>* labels, bool* ok) {
+ ZoneList<const AstRawString*>* labels,
+ AllowLabelledFunctionStatement allow_labelled_function_statement,
adamk 2016/03/24 01:15:52 How about "allow_function" for this name (here and
+ bool* ok) {
// ExpressionStatement | LabelledStatement ::
// Expression ';'
// Identifier ':' Statement
@@ -2481,9 +2485,14 @@ Statement* Parser::ParseExpressionOrLabelledStatement(
Expect(Token::COLON, CHECK_OK);
// ES#sec-labelled-function-declarations Labelled Function Declarations
if (peek() == Token::FUNCTION && is_sloppy(language_mode())) {
- return ParseFunctionDeclaration(labels, ok);
+ if (allow_labelled_function_statement ==
+ kAllowLabelledFunctionStatement) {
+ return ParseFunctionDeclaration(labels, ok);
+ } else {
+ return ParseScopedStatement(labels, true, ok);
+ }
}
- return ParseStatement(labels, ok);
+ return ParseStatement(labels, kDisallowLabelledFunctionStatement, ok);
}
// If we have an extension, we allow a native function declaration.
@@ -3471,7 +3480,7 @@ Statement* Parser::ParseScopedStatement(ZoneList<const AstRawString*>* labels,
bool legacy, bool* ok) {
if (is_strict(language_mode()) || peek() != Token::FUNCTION ||
(legacy && allow_harmony_restrictive_declarations())) {
- return ParseSubStatement(labels, ok);
+ return ParseSubStatement(labels, kDisallowLabelledFunctionStatement, ok);
} else {
if (legacy) {
++use_counts_[v8::Isolate::kLegacyFunctionDeclaration];
« src/parsing/parser.h ('K') | « src/parsing/parser.h ('k') | src/parsing/parser-base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698