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