Chromium Code Reviews| Index: src/preparser.h |
| diff --git a/src/preparser.h b/src/preparser.h |
| index 249eed983c4f4c08485073b60f67651f5a3cb407..1051f97b8af2554510dc0ffd6fe589958511a1b3 100644 |
| --- a/src/preparser.h |
| +++ b/src/preparser.h |
| @@ -714,6 +714,9 @@ class ParserBase : public Traits { |
| ExpressionT CheckAndRewriteReferenceExpression( |
| ExpressionT expression, int beg_pos, int end_pos, |
| MessageTemplate::Template message, bool* ok); |
| + ExpressionT CheckAndRewriteReferenceExpression( |
| + ExpressionT expression, int beg_pos, int end_pos, |
| + MessageTemplate::Template message, ParseErrorType type, bool* ok); |
| // Used to validate property names in object literals and class literals |
| enum PropertyKind { |
| @@ -1473,6 +1476,10 @@ class PreParserTraits { |
| Handle<Object> arg, int pos) { |
| return PreParserExpression::Default(); |
| } |
| + PreParserExpression NewThrowSyntaxError(MessageTemplate::Template message, |
| + int pos) { |
| + return PreParserExpression::Default(); |
| + } |
| PreParserExpression NewThrowTypeError(MessageTemplate::Template message, |
| Handle<Object> arg, int pos) { |
| return PreParserExpression::Default(); |
| @@ -3937,6 +3944,16 @@ typename ParserBase<Traits>::ExpressionT |
| ParserBase<Traits>::CheckAndRewriteReferenceExpression( |
| ExpressionT expression, int beg_pos, int end_pos, |
| MessageTemplate::Template message, bool* ok) { |
| + return this->CheckAndRewriteReferenceExpression(expression, beg_pos, end_pos, |
| + message, kReferenceError, ok); |
| +} |
| + |
| + |
| +template <typename Traits> |
| +typename ParserBase<Traits>::ExpressionT |
| +ParserBase<Traits>::CheckAndRewriteReferenceExpression( |
| + ExpressionT expression, int beg_pos, int end_pos, |
| + MessageTemplate::Template message, ParseErrorType type, bool* ok) { |
| Scanner::Location location(beg_pos, end_pos); |
| if (this->IsIdentifier(expression)) { |
| if (is_strict(language_mode()) && |
| @@ -3960,10 +3977,12 @@ ParserBase<Traits>::CheckAndRewriteReferenceExpression( |
| // If it is a call, make it a runtime error for legacy web compatibility. |
| // Rewrite `expr' to `expr[throw ReferenceError]'. |
| int pos = location.beg_pos; |
| - ExpressionT error = this->NewThrowReferenceError(message, pos); |
| + ExpressionT error = type == kReferenceError |
| + ? this->NewThrowReferenceError(message, pos) |
| + : this->NewThrowSyntaxError(message, pos); |
|
caitp (gmail)
2015/08/14 17:06:17
I'm not sure if this distinction is necessary or g
adamk
2015/08/15 01:06:15
Seems fine to me, and also makes sense tonot throw
|
| return factory()->NewProperty(expression, error, pos); |
| } else { |
| - this->ReportMessageAt(location, message, kReferenceError); |
| + this->ReportMessageAt(location, message, type); |
| *ok = false; |
| return this->EmptyExpression(); |
| } |