| 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);
|
|
|