| Index: src/parsing/parser-base.h
|
| diff --git a/src/parsing/parser-base.h b/src/parsing/parser-base.h
|
| index 4a13688eda09ec3e35d0e6bb77285887f65341cb..8922c7e282e84906a57ff6f737303f9e35e78c3a 100644
|
| --- a/src/parsing/parser-base.h
|
| +++ b/src/parsing/parser-base.h
|
| @@ -454,6 +454,9 @@ class ParserBase : public Traits {
|
| scanner()->is_next_contextual_keyword(keyword);
|
| }
|
|
|
| + void ExpectMetaProperty(Vector<const char> property_name,
|
| + const char* full_name, int pos, bool* ok);
|
| +
|
| void ExpectContextualKeyword(Vector<const char> keyword, bool* ok) {
|
| Expect(Token::IDENTIFIER, ok);
|
| if (!*ok) return;
|
| @@ -2540,11 +2543,10 @@ ParserBase<Traits>::ParseMemberExpression(ExpressionClassifier* classifier,
|
| Consume(Token::FUNCTION);
|
| int function_token_position = position();
|
|
|
| - if (FLAG_harmony_function_sent && Check(Token::PERIOD)) {
|
| + if (FLAG_harmony_function_sent && peek() == Token::PERIOD) {
|
| // function.sent
|
| -
|
| int pos = position();
|
| - ExpectContextualKeyword(CStrVector("sent"), CHECK_OK);
|
| + ExpectMetaProperty(CStrVector("sent"), "function.sent", pos, CHECK_OK);
|
|
|
| if (!is_generator()) {
|
| // TODO(neis): allow escaping into closures?
|
| @@ -2769,13 +2771,26 @@ ParserBase<Traits>::ParseSuperExpression(bool is_new,
|
| return this->EmptyExpression();
|
| }
|
|
|
| +template <class Traits>
|
| +void ParserBase<Traits>::ExpectMetaProperty(Vector<const char> property_name,
|
| + const char* full_name, int pos,
|
| + bool* ok) {
|
| + Consume(Token::PERIOD);
|
| + ExpectContextualKeyword(property_name, ok);
|
| + if (!*ok) return;
|
| + if (scanner()->literal_contains_escapes()) {
|
| + Traits::ReportMessageAt(
|
| + Scanner::Location(pos, scanner()->location().end_pos),
|
| + MessageTemplate::kInvalidEscapedMetaProperty, full_name);
|
| + *ok = false;
|
| + }
|
| +}
|
|
|
| template <class Traits>
|
| typename ParserBase<Traits>::ExpressionT
|
| ParserBase<Traits>::ParseNewTargetExpression(bool* ok) {
|
| int pos = position();
|
| - Consume(Token::PERIOD);
|
| - ExpectContextualKeyword(CStrVector("target"), CHECK_OK);
|
| + ExpectMetaProperty(CStrVector("target"), "new.target", pos, CHECK_OK);
|
|
|
| if (!scope_->ReceiverScope()->is_function_scope()) {
|
| ReportMessageAt(scanner()->location(),
|
|
|