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

Unified Diff: src/parser.cc

Issue 12646003: Add parser support for generators. (Closed) Base URL: git://github.com/v8/v8.git@bleeding_edge
Patch Set: Created 7 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
« no previous file with comments | « src/parser.h ('k') | src/preparser.h » ('j') | src/preparser.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/parser.cc
diff --git a/src/parser.cc b/src/parser.cc
index 29b1fe74c6058a344f12d75e5d9407f0b86d1ae6..0c1ed2bde96d28c4e2ac8c28d7fe000ef5dde3cb 100644
--- a/src/parser.cc
+++ b/src/parser.cc
@@ -3594,6 +3594,7 @@ Expression* Parser::ParsePrimaryExpression(bool* ok) {
break;
case Token::IDENTIFIER:
+ case Token::YIELD:
case Token::FUTURE_STRICT_RESERVED_WORD: {
Handle<String> name = ParseIdentifier(CHECK_OK);
if (fni_ != NULL) fni_->PushVariableName(name);
@@ -4662,7 +4663,8 @@ bool Parser::peek_any_identifier() {
Token::Value next = peek();
return next == Token::IDENTIFIER ||
next == Token::FUTURE_RESERVED_WORD ||
- next == Token::FUTURE_STRICT_RESERVED_WORD;
+ next == Token::FUTURE_STRICT_RESERVED_WORD ||
+ next == Token::YIELD;
}
@@ -4737,7 +4739,10 @@ Handle<String> Parser::ParseIdentifier(bool* ok) {
if (!top_scope_->is_classic_mode()) {
Expect(Token::IDENTIFIER, ok);
} else if (!Check(Token::IDENTIFIER)) {
- Expect(Token::FUTURE_STRICT_RESERVED_WORD, ok);
+ if (Check(Token::YIELD))
+ *ok = !inside_generator();
+ else
+ Expect(Token::FUTURE_STRICT_RESERVED_WORD, ok);
}
if (!*ok) return Handle<String>();
return GetSymbol(ok);
@@ -4750,8 +4755,15 @@ Handle<String> Parser::ParseIdentifierOrStrictReservedWord(
bool* is_strict_reserved, bool* ok) {
*is_strict_reserved = false;
if (!Check(Token::IDENTIFIER)) {
- Expect(Token::FUTURE_STRICT_RESERVED_WORD, ok);
- *is_strict_reserved = true;
+ if (Check(Token::YIELD)) {
+ if (inside_generator())
+ *ok = false;
+ else
+ *is_strict_reserved = true;
+ } else {
+ Expect(Token::FUTURE_STRICT_RESERVED_WORD, ok);
+ *is_strict_reserved = true;
+ }
}
if (!*ok) return Handle<String>();
return GetSymbol(ok);
« no previous file with comments | « src/parser.h ('k') | src/preparser.h » ('j') | src/preparser.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698