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

Unified Diff: src/parsing/parser-base.h

Issue 2268413002: [parser] Clean up (pre)parser traits, part 3 (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@nickie-2273693002-ref-traits
Patch Set: Created 4 years, 4 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
Index: src/parsing/parser-base.h
diff --git a/src/parsing/parser-base.h b/src/parsing/parser-base.h
index d4d4b74c9e7abbd964fca31adcbd82193cc2d602..ae0539c86efe54826e8a87a2736834fe294119f8 100644
--- a/src/parsing/parser-base.h
+++ b/src/parsing/parser-base.h
@@ -127,7 +127,7 @@ struct FormalParametersBase {
// is correct (e.g. an if statement branch w/o braces)!
#define CHECK_OK_CUSTOM(x) ok); \
- if (!*ok) return this->x(); \
+ if (!*ok) return impl()->x(); \
((void)0
#define DUMMY ) // to make indentation work
#undef DUMMY
@@ -818,7 +818,7 @@ class ParserBase : public ParserBaseTraits<Impl> {
Scanner::Location octal = scanner()->octal_position();
if (octal.IsValid() && beg_pos <= octal.beg_pos &&
octal.end_pos <= end_pos) {
- ReportMessageAt(octal, message);
+ impl()->ReportMessageAt(octal, message);
scanner()->clear_octal_position();
*ok = false;
}
@@ -860,13 +860,13 @@ class ParserBase : public ParserBaseTraits<Impl> {
if (is_sloppy(language_mode)) return;
if (impl()->IsEvalOrArguments(function_name)) {
- Traits::ReportMessageAt(function_name_loc,
+ impl()->ReportMessageAt(function_name_loc,
MessageTemplate::kStrictEvalArguments);
*ok = false;
return;
}
if (function_name_validity == kFunctionNameIsStrictReserved) {
- Traits::ReportMessageAt(function_name_loc,
+ impl()->ReportMessageAt(function_name_loc,
MessageTemplate::kUnexpectedStrictReserved);
*ok = false;
return;
@@ -896,34 +896,20 @@ class ParserBase : public ParserBaseTraits<Impl> {
void ReportMessage(MessageTemplate::Template message, const char* arg = NULL,
ParseErrorType error_type = kSyntaxError) {
Scanner::Location source_location = scanner()->location();
- Traits::ReportMessageAt(source_location, message, arg, error_type);
+ impl()->ReportMessageAt(source_location, message, arg, error_type);
}
void ReportMessage(MessageTemplate::Template message, const AstRawString* arg,
ParseErrorType error_type = kSyntaxError) {
Scanner::Location source_location = scanner()->location();
- Traits::ReportMessageAt(source_location, message, arg, error_type);
- }
-
- void ReportMessageAt(Scanner::Location location,
- MessageTemplate::Template message,
- const char* arg = NULL,
- ParseErrorType error_type = kSyntaxError) {
- Traits::ReportMessageAt(location, message, arg, error_type);
- }
-
- void ReportMessageAt(Scanner::Location location,
- MessageTemplate::Template message,
- const AstRawString* arg,
- ParseErrorType error_type = kSyntaxError) {
- Traits::ReportMessageAt(location, message, arg, error_type);
+ impl()->ReportMessageAt(source_location, message, arg, error_type);
}
void ReportMessageAt(Scanner::Location location,
MessageTemplate::Template message,
ParseErrorType error_type) {
- ReportMessageAt(location, message, static_cast<const char*>(nullptr),
- error_type);
+ impl()->ReportMessageAt(location, message,
+ static_cast<const char*>(nullptr), error_type);
}
void GetUnexpectedTokenMessage(
@@ -938,7 +924,7 @@ class ParserBase : public ParserBaseTraits<Impl> {
void ReportClassifierError(
const typename ExpressionClassifier::Error& error) {
- Traits::ReportMessageAt(error.location, error.message, error.arg,
+ impl()->ReportMessageAt(error.location, error.message, error.arg,
error.type);
}
@@ -1006,7 +992,7 @@ class ParserBase : public ParserBaseTraits<Impl> {
if (classifier->is_valid_binding_pattern()) {
// A simple arrow formal parameter: IDENTIFIER => BODY.
if (!impl()->IsIdentifier(expr)) {
- Traits::ReportMessageAt(scanner()->location(),
+ impl()->ReportMessageAt(scanner()->location(),
MessageTemplate::kUnexpectedToken,
Token::String(scanner()->current_token()));
*ok = false;
@@ -1413,7 +1399,7 @@ void ParserBase<Impl>::ReportUnexpectedTokenAt(
MessageTemplate::Template message) {
const char* arg;
GetUnexpectedTokenMessage(token, &message, &source_location, &arg);
- Traits::ReportMessageAt(source_location, message, arg);
+ impl()->ReportMessageAt(source_location, message, arg);
}
template <typename Impl>
@@ -1473,7 +1459,7 @@ ParserBase<Impl>::ParseAndClassifyIdentifier(ExpressionClassifier* classifier,
is_strict(language_mode())) {
ReportUnexpectedToken(next);
*ok = false;
- return Traits::EmptyIdentifier();
+ return impl()->EmptyIdentifier();
}
if (next == Token::LET ||
(next == Token::ESCAPED_STRICT_RESERVED_WORD &&
@@ -1485,7 +1471,7 @@ ParserBase<Impl>::ParseAndClassifyIdentifier(ExpressionClassifier* classifier,
} else {
this->ReportUnexpectedToken(next);
*ok = false;
- return Traits::EmptyIdentifier();
+ return impl()->EmptyIdentifier();
}
}
@@ -1505,7 +1491,7 @@ ParserBase<Impl>::ParseIdentifierOrStrictReservedWord(
} else {
ReportUnexpectedToken(next);
*ok = false;
- return Traits::EmptyIdentifier();
+ return impl()->EmptyIdentifier();
}
return this->GetSymbol(scanner());
@@ -1523,7 +1509,7 @@ typename ParserBase<Impl>::IdentifierT ParserBase<Impl>::ParseIdentifierName(
next != Token::ESCAPED_STRICT_RESERVED_WORD && !Token::IsKeyword(next)) {
this->ReportUnexpectedToken(next);
*ok = false;
- return Traits::EmptyIdentifier();
+ return impl()->EmptyIdentifier();
}
return this->GetSymbol(scanner());
@@ -1537,7 +1523,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseRegExpLiteral(
Next();
ReportMessage(MessageTemplate::kUnterminatedRegExp);
*ok = false;
- return Traits::EmptyExpression();
+ return impl()->EmptyExpression();
}
int literal_index = function_state_->NextMaterializedLiteralIndex();
@@ -1548,7 +1534,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseRegExpLiteral(
Next();
ReportMessage(MessageTemplate::kMalformedRegExpFlags);
*ok = false;
- return Traits::EmptyExpression();
+ return impl()->EmptyExpression();
}
int js_flags = flags.FromJust();
Next();
@@ -1671,10 +1657,10 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParsePrimaryExpression(
MessageTemplate::kInvalidRestParameter);
}
if (peek() == Token::COMMA) {
- ReportMessageAt(scanner()->peek_location(),
- MessageTemplate::kParamAfterRest);
+ impl()->ReportMessageAt(scanner()->peek_location(),
+ MessageTemplate::kParamAfterRest);
*ok = false;
- return this->EmptyExpression();
+ return impl()->EmptyExpression();
}
Expect(Token::RPAREN, CHECK_OK);
return factory()->NewSpread(expr, ellipsis_pos, expr_pos);
@@ -1692,7 +1678,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParsePrimaryExpression(
BindingPatternUnexpectedToken(classifier);
Consume(Token::CLASS);
int class_token_position = position();
- IdentifierT name = this->EmptyIdentifier();
+ IdentifierT name = impl()->EmptyIdentifier();
bool is_strict_reserved_name = false;
Scanner::Location class_name_location = Scanner::Location::invalid();
if (peek_any_identifier()) {
@@ -1731,7 +1717,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParsePrimaryExpression(
ReportUnexpectedToken(Next());
*ok = false;
- return this->EmptyExpression();
+ return impl()->EmptyExpression();
}
template <typename Impl>
@@ -1822,7 +1808,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseArrayLiteral(
while (peek() != Token::RBRACK) {
ExpressionT elem;
if (peek() == Token::COMMA) {
- elem = this->GetLiteralTheHole(peek_position(), factory());
+ elem = impl()->GetLiteralTheHole(peek_position());
} else if (peek() == Token::ELLIPSIS) {
int start_pos = peek_position();
Consume(Token::ELLIPSIS);
@@ -1878,7 +1864,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseArrayLiteral(
// to change. Also, this error message will never appear while pre-
// parsing (this is OK, as it is an implementation limitation).
ReportMessage(MessageTemplate::kTooManySpreads);
- return this->EmptyExpression();
+ return impl()->EmptyExpression();
}
}
return result;
@@ -2107,7 +2093,7 @@ ParserBase<Impl>::ParsePropertyDefinition(
if (in_class && name_token == Token::STATIC && IsNormalMethod(method_kind)) {
// ClassElement (static)
// 'static' MethodDefinition
- *name = this->EmptyIdentifier();
+ *name = impl()->EmptyIdentifier();
ObjectLiteralPropertyT property = ParsePropertyDefinition(
checker, true, has_extends, MethodKind::kStatic, is_computed_name,
nullptr, classifier, name, ok);
@@ -2119,7 +2105,7 @@ ParserBase<Impl>::ParsePropertyDefinition(
// MethodDefinition (Accessors)
// get PropertyName '(' ')' '{' FunctionBody '}'
// set PropertyName '(' PropertySetParameterList ')' '{' FunctionBody '}'
- *name = this->EmptyIdentifier();
+ *name = impl()->EmptyIdentifier();
bool dont_care = false;
name_token = peek();
@@ -2156,7 +2142,7 @@ ParserBase<Impl>::ParsePropertyDefinition(
Token::Value next = Next();
ReportUnexpectedToken(next);
*ok = false;
- return this->EmptyObjectLiteralProperty();
+ return impl()->EmptyObjectLiteralProperty();
}
template <typename Impl>
@@ -2180,7 +2166,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseObjectLiteral(
const bool in_class = false;
const bool has_extends = false;
bool is_computed_name = false;
- IdentifierT name = this->EmptyIdentifier();
+ IdentifierT name = impl()->EmptyIdentifier();
ObjectLiteralPropertyT property = this->ParsePropertyDefinition(
&checker, in_class, has_extends, MethodKind::kNormal, &is_computed_name,
NULL, classifier, &name, CHECK_OK);
@@ -2263,7 +2249,7 @@ ParserBase<Impl>::ParseArguments(Scanner::Location* first_spread_arg_loc,
if (result->length() > Code::kMaxArguments) {
ReportMessage(MessageTemplate::kTooManyArguments);
*ok = false;
- return this->NullExpressionList();
+ return impl()->NullExpressionList();
}
done = (peek() != Token::COMMA);
if (!done) {
@@ -2276,9 +2262,9 @@ ParserBase<Impl>::ParseArguments(Scanner::Location* first_spread_arg_loc,
}
Scanner::Location location = scanner_->location();
if (Token::RPAREN != Next()) {
- ReportMessageAt(location, MessageTemplate::kUnterminatedArgList);
+ impl()->ReportMessageAt(location, MessageTemplate::kUnterminatedArgList);
*ok = false;
- return this->NullExpressionList();
+ return impl()->NullExpressionList();
}
*first_spread_arg_loc = spread_arg;
@@ -2520,7 +2506,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseYieldExpression(
ExpressionT generator_object =
factory()->NewVariableProxy(function_state_->generator_object_variable());
// The following initialization is necessary.
- ExpressionT expression = Traits::EmptyExpression();
+ ExpressionT expression = impl()->EmptyExpression();
bool delegating = false; // yield*
if (!scanner()->HasAnyLineTerminatorBeforeNext()) {
if (Check(Token::MUL)) delegating = true;
@@ -2549,7 +2535,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseYieldExpression(
return impl()->RewriteYieldStar(generator_object, expression, pos);
}
- expression = Traits::BuildIteratorResult(expression, false);
+ expression = impl()->BuildIteratorResult(expression, false);
// Hackily disambiguate o from o.next and o [Symbol.iterator]().
// TODO(verwaest): Come up with a better solution.
typename Traits::Type::YieldExpression yield = factory()->NewYield(
@@ -2576,20 +2562,22 @@ ParserBase<Impl>::ParseTailCallExpression(ExpressionClassifier* classifier,
Scanner::Location loc(pos, scanner()->location().end_pos);
if (!expression->IsCall()) {
Scanner::Location sub_loc(sub_expression_pos, loc.end_pos);
- ReportMessageAt(sub_loc, MessageTemplate::kUnexpectedInsideTailCall);
+ impl()->ReportMessageAt(sub_loc,
+ MessageTemplate::kUnexpectedInsideTailCall);
*ok = false;
- return Traits::EmptyExpression();
+ return impl()->EmptyExpression();
}
if (impl()->IsDirectEvalCall(expression)) {
Scanner::Location sub_loc(sub_expression_pos, loc.end_pos);
- ReportMessageAt(sub_loc, MessageTemplate::kUnexpectedTailCallOfEval);
+ impl()->ReportMessageAt(sub_loc,
+ MessageTemplate::kUnexpectedTailCallOfEval);
*ok = false;
- return Traits::EmptyExpression();
+ return impl()->EmptyExpression();
}
if (!is_strict(language_mode())) {
- ReportMessageAt(loc, MessageTemplate::kUnexpectedSloppyTailCall);
+ impl()->ReportMessageAt(loc, MessageTemplate::kUnexpectedSloppyTailCall);
*ok = false;
- return Traits::EmptyExpression();
+ return impl()->EmptyExpression();
}
ReturnExprContext return_expr_context =
function_state_->return_expr_context();
@@ -2598,7 +2586,7 @@ ParserBase<Impl>::ParseTailCallExpression(ExpressionClassifier* classifier,
switch (return_expr_context) {
case ReturnExprContext::kInsideValidReturnStatement:
UNREACHABLE();
- return Traits::EmptyExpression();
+ return impl()->EmptyExpression();
case ReturnExprContext::kInsideValidBlock:
msg = MessageTemplate::kUnexpectedTailCall;
break;
@@ -2609,9 +2597,9 @@ ParserBase<Impl>::ParseTailCallExpression(ExpressionClassifier* classifier,
msg = MessageTemplate::kUnexpectedTailCallInForInOf;
break;
}
- ReportMessageAt(loc, msg);
+ impl()->ReportMessageAt(loc, msg);
*ok = false;
- return Traits::EmptyExpression();
+ return impl()->EmptyExpression();
}
classifier->RecordTailCallExpressionError(
loc, MessageTemplate::kUnexpectedTailCall);
@@ -2740,18 +2728,18 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseUnaryExpression(
// "delete identifier" is a syntax error in strict mode.
ReportMessage(MessageTemplate::kStrictDelete);
*ok = false;
- return this->EmptyExpression();
+ return impl()->EmptyExpression();
}
}
if (peek() == Token::EXP) {
ReportUnexpectedToken(Next());
*ok = false;
- return this->EmptyExpression();
+ return impl()->EmptyExpression();
}
// Allow Traits do rewrite the expression.
- return this->BuildUnaryExpression(expression, op, pos, factory());
+ return impl()->BuildUnaryExpression(expression, op, pos);
} else if (Token::IsCountOp(op)) {
BindingPatternUnexpectedToken(classifier);
ArrowFormalParametersUnexpectedToken(classifier);
@@ -2887,7 +2875,7 @@ ParserBase<Impl>::ParseLeftHandSideExpression(ExpressionClassifier* classifier,
ReportClassifierError(
async_classifier.async_arrow_formal_parameters_error());
*ok = false;
- return this->EmptyExpression();
+ return impl()->EmptyExpression();
}
if (args->length()) {
// async ( Arguments ) => ...
@@ -3057,10 +3045,10 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseMemberExpression(
if (!is_generator()) {
// TODO(neis): allow escaping into closures?
- ReportMessageAt(scanner()->location(),
- MessageTemplate::kUnexpectedFunctionSent);
+ impl()->ReportMessageAt(scanner()->location(),
+ MessageTemplate::kUnexpectedFunctionSent);
*ok = false;
- return this->EmptyExpression();
+ return impl()->EmptyExpression();
}
return this->FunctionSentExpression(factory(), pos);
@@ -3069,7 +3057,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseMemberExpression(
FunctionKind function_kind = Check(Token::MUL)
? FunctionKind::kGeneratorFunction
: FunctionKind::kNormalFunction;
- IdentifierT name = this->EmptyIdentifier();
+ IdentifierT name = impl()->EmptyIdentifier();
bool is_strict_reserved_name = false;
Scanner::Location function_name_location = Scanner::Location::invalid();
FunctionLiteral::FunctionType function_type =
@@ -3121,9 +3109,10 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseSuperExpression(
}
}
- ReportMessageAt(scanner()->location(), MessageTemplate::kUnexpectedSuper);
+ impl()->ReportMessageAt(scanner()->location(),
+ MessageTemplate::kUnexpectedSuper);
*ok = false;
- return this->EmptyExpression();
+ return impl()->EmptyExpression();
}
template <typename Impl>
@@ -3133,7 +3122,7 @@ void ParserBase<Impl>::ExpectMetaProperty(Vector<const char> property_name,
Consume(Token::PERIOD);
ExpectContextualKeyword(property_name, CHECK_OK_CUSTOM(Void));
if (scanner()->literal_contains_escapes()) {
- Traits::ReportMessageAt(
+ impl()->ReportMessageAt(
Scanner::Location(pos, scanner()->location().end_pos),
MessageTemplate::kInvalidEscapedMetaProperty, full_name);
*ok = false;
@@ -3147,10 +3136,10 @@ ParserBase<Impl>::ParseNewTargetExpression(bool* ok) {
ExpectMetaProperty(CStrVector("target"), "new.target", pos, CHECK_OK);
if (!GetReceiverScope()->is_function_scope()) {
- ReportMessageAt(scanner()->location(),
- MessageTemplate::kUnexpectedNewTarget);
+ impl()->ReportMessageAt(scanner()->location(),
+ MessageTemplate::kUnexpectedNewTarget);
*ok = false;
- return this->EmptyExpression();
+ return impl()->EmptyExpression();
}
return this->NewTargetExpression(pos);
@@ -3222,14 +3211,14 @@ ParserBase<Impl>::ParseMemberExpressionContinuation(
case Token::ILLEGAL: {
ReportUnexpectedTokenAt(scanner()->peek_location(), Token::ILLEGAL);
*ok = false;
- return this->EmptyExpression();
+ return impl()->EmptyExpression();
}
default:
return expression;
}
}
DCHECK(false);
- return this->EmptyExpression();
+ return impl()->EmptyExpression();
}
template <typename Impl>
@@ -3250,7 +3239,7 @@ void ParserBase<Impl>::ParseFormalParameter(FormalParametersT* parameters,
classifier->RecordNonSimpleParameter();
}
- ExpressionT initializer = Traits::EmptyExpression();
+ ExpressionT initializer = impl()->EmptyExpression();
if (!is_rest && Check(Token::ASSIGN)) {
ExpressionClassifier init_classifier(this);
initializer = ParseAssignmentExpression(true, &init_classifier,
@@ -3298,8 +3287,8 @@ void ParserBase<Impl>::ParseFormalParameterList(
parameters->is_simple = false;
classifier->RecordNonSimpleParameter();
if (peek() == Token::COMMA) {
- ReportMessageAt(scanner()->peek_location(),
- MessageTemplate::kParamAfterRest);
+ impl()->ReportMessageAt(scanner()->peek_location(),
+ MessageTemplate::kParamAfterRest);
*ok = false;
return;
}
@@ -3327,19 +3316,22 @@ void ParserBase<Impl>::CheckArityRestrictions(int param_count,
int formals_end_pos, bool* ok) {
if (IsGetterFunction(function_kind)) {
if (param_count != 0) {
- ReportMessageAt(Scanner::Location(formals_start_pos, formals_end_pos),
- MessageTemplate::kBadGetterArity);
+ impl()->ReportMessageAt(
+ Scanner::Location(formals_start_pos, formals_end_pos),
+ MessageTemplate::kBadGetterArity);
*ok = false;
}
} else if (IsSetterFunction(function_kind)) {
if (param_count != 1) {
- ReportMessageAt(Scanner::Location(formals_start_pos, formals_end_pos),
- MessageTemplate::kBadSetterArity);
+ impl()->ReportMessageAt(
+ Scanner::Location(formals_start_pos, formals_end_pos),
+ MessageTemplate::kBadSetterArity);
*ok = false;
}
if (has_rest) {
- ReportMessageAt(Scanner::Location(formals_start_pos, formals_end_pos),
- MessageTemplate::kBadSetterRestParameter);
+ impl()->ReportMessageAt(
+ Scanner::Location(formals_start_pos, formals_end_pos),
+ MessageTemplate::kBadSetterRestParameter);
*ok = false;
}
}
@@ -3399,7 +3391,7 @@ ParserBase<Impl>::ParseArrowFunctionLiteral(
// If next token is not `=>`, it's a syntax error anyways.
ReportUnexpectedTokenAt(scanner_->peek_location(), Token::ARROW);
*ok = false;
- return this->EmptyExpression();
+ return impl()->EmptyExpression();
}
typename Traits::Type::StatementList body;
@@ -3435,7 +3427,7 @@ ParserBase<Impl>::ParseArrowFunctionLiteral(
}
} else {
body = impl()->ParseEagerFunctionBody(
- this->EmptyIdentifier(), kNoSourcePosition, formal_parameters,
+ impl()->EmptyIdentifier(), kNoSourcePosition, formal_parameters,
arrow_kind, FunctionLiteral::kAnonymousExpression, CHECK_OK);
materialized_literal_count =
function_state.materialized_literal_count();
@@ -3492,7 +3484,7 @@ ParserBase<Impl>::ParseArrowFunctionLiteral(
}
FunctionLiteralT function_literal = factory()->NewFunctionLiteral(
- this->EmptyIdentifierString(), formal_parameters.scope, body,
+ impl()->EmptyIdentifierString(), formal_parameters.scope, body,
materialized_literal_count, expected_property_count, num_parameters,
FunctionLiteral::kNoDuplicateParameters,
FunctionLiteral::kAnonymousExpression,
@@ -3548,16 +3540,16 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseTemplateLiteral(
CheckTemplateOctalLiteral(pos, peek_position(), CHECK_OK);
next = peek();
if (next == Token::EOS) {
- ReportMessageAt(Scanner::Location(start, peek_position()),
- MessageTemplate::kUnterminatedTemplate);
+ impl()->ReportMessageAt(Scanner::Location(start, peek_position()),
+ MessageTemplate::kUnterminatedTemplate);
*ok = false;
- return Traits::EmptyExpression();
+ return impl()->EmptyExpression();
} else if (next == Token::ILLEGAL) {
- Traits::ReportMessageAt(
+ impl()->ReportMessageAt(
Scanner::Location(position() + 1, peek_position()),
MessageTemplate::kUnexpectedToken, "ILLEGAL", kSyntaxError);
*ok = false;
- return Traits::EmptyExpression();
+ return impl()->EmptyExpression();
}
int expr_pos = peek_position();
@@ -3567,10 +3559,10 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseTemplateLiteral(
impl()->AddTemplateExpression(&ts, expression);
if (peek() != Token::RBRACE) {
- ReportMessageAt(Scanner::Location(expr_pos, peek_position()),
- MessageTemplate::kUnterminatedTemplateExpr);
+ impl()->ReportMessageAt(Scanner::Location(expr_pos, peek_position()),
+ MessageTemplate::kUnterminatedTemplateExpr);
*ok = false;
- return Traits::EmptyExpression();
+ return impl()->EmptyExpression();
}
// If we didn't die parsing that expression, our next token should be a
@@ -3580,16 +3572,16 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseTemplateLiteral(
pos = position();
if (next == Token::EOS) {
- ReportMessageAt(Scanner::Location(start, pos),
- MessageTemplate::kUnterminatedTemplate);
+ impl()->ReportMessageAt(Scanner::Location(start, pos),
+ MessageTemplate::kUnterminatedTemplate);
*ok = false;
- return Traits::EmptyExpression();
+ return impl()->EmptyExpression();
} else if (next == Token::ILLEGAL) {
- Traits::ReportMessageAt(
+ impl()->ReportMessageAt(
Scanner::Location(position() + 1, peek_position()),
MessageTemplate::kUnexpectedToken, "ILLEGAL", kSyntaxError);
*ok = false;
- return Traits::EmptyExpression();
+ return impl()->EmptyExpression();
}
impl()->AddTemplateSpan(&ts, next == Token::TEMPLATE_TAIL);
@@ -3620,7 +3612,7 @@ ParserBase<Impl>::CheckAndRewriteReferenceExpression(
ReportMessageAt(Scanner::Location(beg_pos, end_pos),
MessageTemplate::kStrictEvalArguments, kSyntaxError);
*ok = false;
- return this->EmptyExpression();
+ return impl()->EmptyExpression();
}
if (expression->IsValidReferenceExpression()) {
return expression;
@@ -3628,12 +3620,12 @@ ParserBase<Impl>::CheckAndRewriteReferenceExpression(
if (expression->IsCall()) {
// If it is a call, make it a runtime error for legacy web compatibility.
// Rewrite `expr' to `expr[throw ReferenceError]'.
- ExpressionT error = this->NewThrowReferenceError(message, beg_pos);
+ ExpressionT error = impl()->NewThrowReferenceError(message, beg_pos);
return factory()->NewProperty(expression, error, beg_pos);
}
ReportMessageAt(Scanner::Location(beg_pos, end_pos), message, type);
*ok = false;
- return this->EmptyExpression();
+ return impl()->EmptyExpression();
}
template <typename Impl>
« src/parsing/parser.h ('K') | « src/parsing/parser.cc ('k') | src/parsing/preparser.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698