| Index: src/parsing/parser-base.h
|
| diff --git a/src/parsing/parser-base.h b/src/parsing/parser-base.h
|
| index a3ba093d16855812a14943b2fd19189542b7050a..25f55ca542636f7d138b75db848b63bcd60d7f7c 100644
|
| --- a/src/parsing/parser-base.h
|
| +++ b/src/parsing/parser-base.h
|
| @@ -554,7 +554,7 @@ class ParserBase : public ParserBaseTraits<Impl> {
|
| // to this function. Filled in by constructor.
|
| bool this_function_is_parenthesized_;
|
|
|
| - friend class ParserBaseTraits<Impl>;
|
| + friend Impl;
|
| friend class Checkpoint;
|
| };
|
|
|
| @@ -1157,7 +1157,6 @@ class ParserBase : public ParserBaseTraits<Impl> {
|
| bool* ok);
|
| ExpressionT ParseTemplateLiteral(ExpressionT tag, int start,
|
| ExpressionClassifier* classifier, bool* ok);
|
| - void AddTemplateExpression(ExpressionT);
|
| ExpressionT ParseSuperExpression(bool is_new, bool* ok);
|
| ExpressionT ParseNewTargetExpression(bool* ok);
|
|
|
| @@ -1597,7 +1596,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParsePrimaryExpression(
|
| !scanner()->HasAnyLineTerminatorAfterNext() &&
|
| PeekAhead() == Token::FUNCTION) {
|
| Consume(Token::ASYNC);
|
| - return this->ParseAsyncFunctionExpression(CHECK_OK);
|
| + return impl()->ParseAsyncFunctionExpression(CHECK_OK);
|
| }
|
| // CoverCallExpressionAndAsyncArrowHead
|
| *is_async = true;
|
| @@ -1701,9 +1700,9 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParsePrimaryExpression(
|
| CHECK_OK);
|
| class_name_location = scanner()->location();
|
| }
|
| - return this->ParseClassLiteral(classifier, name, class_name_location,
|
| - is_strict_reserved_name,
|
| - class_token_position, ok);
|
| + return impl()->ParseClassLiteral(classifier, name, class_name_location,
|
| + is_strict_reserved_name,
|
| + class_token_position, ok);
|
| }
|
|
|
| case Token::TEMPLATE_SPAN:
|
| @@ -1715,14 +1714,14 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParsePrimaryExpression(
|
| case Token::MOD:
|
| if (allow_natives() || extension_ != NULL) {
|
| BindingPatternUnexpectedToken(classifier);
|
| - return this->ParseV8Intrinsic(ok);
|
| + return impl()->ParseV8Intrinsic(ok);
|
| }
|
| break;
|
|
|
| case Token::DO:
|
| if (allow_harmony_do_expressions()) {
|
| BindingPatternUnexpectedToken(classifier);
|
| - return Traits::ParseDoExpression(ok);
|
| + return impl()->ParseDoExpression(ok);
|
| }
|
| break;
|
|
|
| @@ -1740,7 +1739,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseExpression(
|
| bool accept_IN, bool* ok) {
|
| ExpressionClassifier classifier(this);
|
| ExpressionT result = ParseExpression(accept_IN, &classifier, CHECK_OK);
|
| - Traits::RewriteNonPattern(&classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(&classifier, CHECK_OK);
|
| return result;
|
| }
|
|
|
| @@ -1872,7 +1871,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseArrayLiteral(
|
| literal_index, pos);
|
| if (first_spread_index >= 0) {
|
| result = factory()->NewRewritableExpression(result);
|
| - Traits::QueueNonPatternForRewriting(result, ok);
|
| + impl()->QueueNonPatternForRewriting(result, ok);
|
| if (!*ok) {
|
| // If the non-pattern rewriting mechanism is used in the future for
|
| // rewriting other things than spreads, this error message will have
|
| @@ -1923,7 +1922,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParsePropertyName(
|
| ExpressionClassifier computed_name_classifier(this);
|
| ExpressionT expression =
|
| ParseAssignmentExpression(true, &computed_name_classifier, CHECK_OK);
|
| - Traits::RewriteNonPattern(&computed_name_classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(&computed_name_classifier, CHECK_OK);
|
| classifier->Accumulate(&computed_name_classifier,
|
| ExpressionClassifier::ExpressionProductions);
|
| Expect(Token::RBRACK, CHECK_OK);
|
| @@ -2037,7 +2036,7 @@ ParserBase<Impl>::ParsePropertyDefinition(
|
| ExpressionClassifier rhs_classifier(this);
|
| ExpressionT rhs = this->ParseAssignmentExpression(
|
| true, &rhs_classifier, CHECK_OK_CUSTOM(EmptyObjectLiteralProperty));
|
| - Traits::RewriteNonPattern(&rhs_classifier,
|
| + impl()->RewriteNonPattern(&rhs_classifier,
|
| CHECK_OK_CUSTOM(EmptyObjectLiteralProperty));
|
| classifier->Accumulate(&rhs_classifier,
|
| ExpressionClassifier::ExpressionProductions);
|
| @@ -2095,7 +2094,7 @@ ParserBase<Impl>::ParsePropertyDefinition(
|
| : FunctionKind::kBaseConstructor;
|
| }
|
|
|
| - ExpressionT value = this->ParseFunctionLiteral(
|
| + ExpressionT value = impl()->ParseFunctionLiteral(
|
| *name, scanner()->location(), kSkipFunctionNameCheck, kind,
|
| kNoSourcePosition, FunctionLiteral::kAccessorOrMethod, language_mode(),
|
| CHECK_OK_CUSTOM(EmptyObjectLiteralProperty));
|
| @@ -2112,7 +2111,7 @@ ParserBase<Impl>::ParsePropertyDefinition(
|
| ObjectLiteralPropertyT property = ParsePropertyDefinition(
|
| checker, true, has_extends, MethodKind::kStatic, is_computed_name,
|
| nullptr, classifier, name, ok);
|
| - Traits::RewriteNonPattern(classifier, ok);
|
| + impl()->RewriteNonPattern(classifier, ok);
|
| return property;
|
| }
|
|
|
| @@ -2134,7 +2133,7 @@ ParserBase<Impl>::ParsePropertyDefinition(
|
| CHECK_OK_CUSTOM(EmptyObjectLiteralProperty));
|
| }
|
|
|
| - typename Traits::Type::FunctionLiteral value = this->ParseFunctionLiteral(
|
| + typename Traits::Type::FunctionLiteral value = impl()->ParseFunctionLiteral(
|
| *name, scanner()->location(), kSkipFunctionNameCheck,
|
| is_get ? FunctionKind::kGetterFunction : FunctionKind::kSetterFunction,
|
| kNoSourcePosition, FunctionLiteral::kAccessorOrMethod, language_mode(),
|
| @@ -2240,7 +2239,7 @@ ParserBase<Impl>::ParseArguments(Scanner::Location* first_spread_arg_loc,
|
| true, classifier, CHECK_OK_CUSTOM(NullExpressionList));
|
| CheckNoTailCallExpressions(classifier, CHECK_OK_CUSTOM(NullExpressionList));
|
| if (!maybe_arrow) {
|
| - Traits::RewriteNonPattern(classifier,
|
| + impl()->RewriteNonPattern(classifier,
|
| CHECK_OK_CUSTOM(NullExpressionList));
|
| }
|
| if (is_spread) {
|
| @@ -2285,7 +2284,7 @@ ParserBase<Impl>::ParseArguments(Scanner::Location* first_spread_arg_loc,
|
|
|
| if (!maybe_arrow || peek() != Token::ARROW) {
|
| if (maybe_arrow) {
|
| - Traits::RewriteNonPattern(classifier,
|
| + impl()->RewriteNonPattern(classifier,
|
| CHECK_OK_CUSTOM(NullExpressionList));
|
| }
|
| if (spread_arg.IsValid()) {
|
| @@ -2458,7 +2457,7 @@ ParserBase<Impl>::ParseAssignmentExpression(bool accept_IN,
|
| ExpressionT right =
|
| this->ParseAssignmentExpression(accept_IN, &rhs_classifier, CHECK_OK);
|
| CheckNoTailCallExpressions(&rhs_classifier, CHECK_OK);
|
| - Traits::RewriteNonPattern(&rhs_classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(&rhs_classifier, CHECK_OK);
|
| classifier->Accumulate(
|
| &rhs_classifier,
|
| ExpressionClassifier::ExpressionProductions |
|
| @@ -2494,14 +2493,14 @@ ParserBase<Impl>::ParseAssignmentExpression(bool accept_IN,
|
|
|
| if (op == Token::ASSIGN_EXP) {
|
| DCHECK(!is_destructuring_assignment);
|
| - return Traits::RewriteAssignExponentiation(expression, right, pos);
|
| + return impl()->RewriteAssignExponentiation(expression, right, pos);
|
| }
|
|
|
| ExpressionT result = factory()->NewAssignment(op, expression, right, pos);
|
|
|
| if (is_destructuring_assignment) {
|
| result = factory()->NewRewritableExpression(result);
|
| - Traits::QueueDestructuringAssignmentForRewriting(result);
|
| + impl()->QueueDestructuringAssignmentForRewriting(result);
|
| }
|
|
|
| return result;
|
| @@ -2541,13 +2540,13 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseYieldExpression(
|
| // Delegating yields require an RHS; fall through.
|
| default:
|
| expression = ParseAssignmentExpression(accept_IN, classifier, CHECK_OK);
|
| - Traits::RewriteNonPattern(classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(classifier, CHECK_OK);
|
| break;
|
| }
|
| }
|
|
|
| if (delegating) {
|
| - return Traits::RewriteYieldStar(generator_object, expression, pos);
|
| + return impl()->RewriteYieldStar(generator_object, expression, pos);
|
| }
|
|
|
| expression = Traits::BuildIteratorResult(expression, false);
|
| @@ -2636,7 +2635,7 @@ ParserBase<Impl>::ParseConditionalExpression(bool accept_IN,
|
| this->ParseBinaryExpression(4, accept_IN, classifier, CHECK_OK);
|
| if (peek() != Token::CONDITIONAL) return expression;
|
| CheckNoTailCallExpressions(classifier, CHECK_OK);
|
| - Traits::RewriteNonPattern(classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(classifier, CHECK_OK);
|
| BindingPatternUnexpectedToken(classifier);
|
| ArrowFormalParametersUnexpectedToken(classifier);
|
| Consume(Token::CONDITIONAL);
|
| @@ -2644,11 +2643,11 @@ ParserBase<Impl>::ParseConditionalExpression(bool accept_IN,
|
| // expressions we always accept the 'in' keyword; see ECMA-262,
|
| // section 11.12, page 58.
|
| ExpressionT left = ParseAssignmentExpression(true, classifier, CHECK_OK);
|
| - Traits::RewriteNonPattern(classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(classifier, CHECK_OK);
|
| Expect(Token::COLON, CHECK_OK);
|
| ExpressionT right =
|
| ParseAssignmentExpression(accept_IN, classifier, CHECK_OK);
|
| - Traits::RewriteNonPattern(classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(classifier, CHECK_OK);
|
| return factory()->NewConditional(expression, left, right, pos);
|
| }
|
|
|
| @@ -2663,7 +2662,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseBinaryExpression(
|
| // prec1 >= 4
|
| while (Precedence(peek(), accept_IN) == prec1) {
|
| CheckNoTailCallExpressions(classifier, CHECK_OK);
|
| - Traits::RewriteNonPattern(classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(classifier, CHECK_OK);
|
| BindingPatternUnexpectedToken(classifier);
|
| ArrowFormalParametersUnexpectedToken(classifier);
|
| Token::Value op = Next();
|
| @@ -2676,7 +2675,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseBinaryExpression(
|
| if (op != Token::OR && op != Token::AND) {
|
| CheckNoTailCallExpressions(classifier, CHECK_OK);
|
| }
|
| - Traits::RewriteNonPattern(classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(classifier, CHECK_OK);
|
|
|
| if (this->ShortcutNumericLiteralBinaryExpression(&x, y, op, pos,
|
| factory())) {
|
| @@ -2700,7 +2699,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseBinaryExpression(
|
| x = factory()->NewUnaryOperation(Token::NOT, x, pos);
|
| }
|
| } else if (op == Token::EXP) {
|
| - x = Traits::RewriteExponentiation(x, y, pos);
|
| + x = impl()->RewriteExponentiation(x, y, pos);
|
| } else {
|
| // We have a "normal" binary operation.
|
| x = factory()->NewBinaryOperation(op, x, y, pos);
|
| @@ -2735,7 +2734,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseUnaryExpression(
|
| int pos = position();
|
| ExpressionT expression = ParseUnaryExpression(classifier, CHECK_OK);
|
| CheckNoTailCallExpressions(classifier, CHECK_OK);
|
| - Traits::RewriteNonPattern(classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(classifier, CHECK_OK);
|
|
|
| if (op == Token::DELETE && is_strict(language_mode())) {
|
| if (this->IsIdentifier(expression)) {
|
| @@ -2765,7 +2764,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseUnaryExpression(
|
| expression, beg_pos, scanner()->location().end_pos,
|
| MessageTemplate::kInvalidLhsInPrefixOp, CHECK_OK);
|
| this->MarkExpressionAsAssigned(expression);
|
| - Traits::RewriteNonPattern(classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(classifier, CHECK_OK);
|
|
|
| return factory()->NewCountOperation(op,
|
| true /* prefix */,
|
| @@ -2782,7 +2781,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseUnaryExpression(
|
|
|
| ExpressionT value = ParseUnaryExpression(classifier, CHECK_OK);
|
|
|
| - return Traits::RewriteAwaitExpression(value, await_pos);
|
| + return impl()->RewriteAwaitExpression(value, await_pos);
|
| } else {
|
| return this->ParsePostfixExpression(classifier, ok);
|
| }
|
| @@ -2807,7 +2806,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParsePostfixExpression(
|
| expression, lhs_beg_pos, scanner()->location().end_pos,
|
| MessageTemplate::kInvalidLhsInPostfixOp, CHECK_OK);
|
| expression = this->MarkExpressionAsAssigned(expression);
|
| - Traits::RewriteNonPattern(classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(classifier, CHECK_OK);
|
|
|
| Token::Value next = Next();
|
| expression =
|
| @@ -2838,13 +2837,13 @@ ParserBase<Impl>::ParseLeftHandSideExpression(ExpressionClassifier* classifier,
|
| switch (peek()) {
|
| case Token::LBRACK: {
|
| CheckNoTailCallExpressions(classifier, CHECK_OK);
|
| - Traits::RewriteNonPattern(classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(classifier, CHECK_OK);
|
| BindingPatternUnexpectedToken(classifier);
|
| ArrowFormalParametersUnexpectedToken(classifier);
|
| Consume(Token::LBRACK);
|
| int pos = position();
|
| ExpressionT index = ParseExpression(true, classifier, CHECK_OK);
|
| - Traits::RewriteNonPattern(classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(classifier, CHECK_OK);
|
| result = factory()->NewProperty(result, index, pos);
|
| Expect(Token::RBRACK, CHECK_OK);
|
| break;
|
| @@ -2853,7 +2852,7 @@ ParserBase<Impl>::ParseLeftHandSideExpression(ExpressionClassifier* classifier,
|
| case Token::LPAREN: {
|
| CheckNoTailCallExpressions(classifier, CHECK_OK);
|
| int pos;
|
| - Traits::RewriteNonPattern(classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(classifier, CHECK_OK);
|
| BindingPatternUnexpectedToken(classifier);
|
| if (scanner()->current_token() == Token::IDENTIFIER ||
|
| scanner()->current_token() == Token::SUPER ||
|
| @@ -2919,8 +2918,8 @@ ParserBase<Impl>::ParseLeftHandSideExpression(ExpressionClassifier* classifier,
|
|
|
| bool is_super_call = result->IsSuperCallReference();
|
| if (spread_pos.IsValid()) {
|
| - args = Traits::PrepareSpreadArguments(args);
|
| - result = Traits::SpreadCall(result, args, pos);
|
| + args = impl()->PrepareSpreadArguments(args);
|
| + result = impl()->SpreadCall(result, args, pos);
|
| } else {
|
| result = factory()->NewCall(result, args, pos, is_possibly_eval);
|
| }
|
| @@ -2939,7 +2938,7 @@ ParserBase<Impl>::ParseLeftHandSideExpression(ExpressionClassifier* classifier,
|
|
|
| case Token::PERIOD: {
|
| CheckNoTailCallExpressions(classifier, CHECK_OK);
|
| - Traits::RewriteNonPattern(classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(classifier, CHECK_OK);
|
| BindingPatternUnexpectedToken(classifier);
|
| ArrowFormalParametersUnexpectedToken(classifier);
|
| Consume(Token::PERIOD);
|
| @@ -2954,7 +2953,7 @@ ParserBase<Impl>::ParseLeftHandSideExpression(ExpressionClassifier* classifier,
|
| case Token::TEMPLATE_SPAN:
|
| case Token::TEMPLATE_TAIL: {
|
| CheckNoTailCallExpressions(classifier, CHECK_OK);
|
| - Traits::RewriteNonPattern(classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(classifier, CHECK_OK);
|
| BindingPatternUnexpectedToken(classifier);
|
| ArrowFormalParametersUnexpectedToken(classifier);
|
| result = ParseTemplateLiteral(result, position(), classifier, CHECK_OK);
|
| @@ -3006,7 +3005,7 @@ ParserBase<Impl>::ParseMemberWithNewPrefixesExpression(
|
| result = this->ParseMemberWithNewPrefixesExpression(classifier, is_async,
|
| CHECK_OK);
|
| }
|
| - Traits::RewriteNonPattern(classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(classifier, CHECK_OK);
|
| if (peek() == Token::LPAREN) {
|
| // NewExpression with arguments.
|
| Scanner::Location spread_pos;
|
| @@ -3014,8 +3013,8 @@ ParserBase<Impl>::ParseMemberWithNewPrefixesExpression(
|
| this->ParseArguments(&spread_pos, classifier, CHECK_OK);
|
|
|
| if (spread_pos.IsValid()) {
|
| - args = Traits::PrepareSpreadArguments(args);
|
| - result = Traits::SpreadCallNew(result, args, new_pos);
|
| + args = impl()->PrepareSpreadArguments(args);
|
| + result = impl()->SpreadCallNew(result, args, new_pos);
|
| } else {
|
| result = factory()->NewCallNew(result, args, new_pos);
|
| }
|
| @@ -3082,7 +3081,7 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseMemberExpression(
|
| function_name_location = scanner()->location();
|
| function_type = FunctionLiteral::kNamedExpression;
|
| }
|
| - result = this->ParseFunctionLiteral(
|
| + result = impl()->ParseFunctionLiteral(
|
| name, function_name_location,
|
| is_strict_reserved_name ? kFunctionNameIsStrictReserved
|
| : kFunctionNameValidityUnknown,
|
| @@ -3169,14 +3168,14 @@ ParserBase<Impl>::ParseMemberExpressionContinuation(
|
| switch (peek()) {
|
| case Token::LBRACK: {
|
| *is_async = false;
|
| - Traits::RewriteNonPattern(classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(classifier, CHECK_OK);
|
| BindingPatternUnexpectedToken(classifier);
|
| ArrowFormalParametersUnexpectedToken(classifier);
|
|
|
| Consume(Token::LBRACK);
|
| int pos = position();
|
| ExpressionT index = this->ParseExpression(true, classifier, CHECK_OK);
|
| - Traits::RewriteNonPattern(classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(classifier, CHECK_OK);
|
| expression = factory()->NewProperty(expression, index, pos);
|
| if (fni_ != NULL) {
|
| this->PushPropertyName(fni_, index);
|
| @@ -3186,7 +3185,7 @@ ParserBase<Impl>::ParseMemberExpressionContinuation(
|
| }
|
| case Token::PERIOD: {
|
| *is_async = false;
|
| - Traits::RewriteNonPattern(classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(classifier, CHECK_OK);
|
| BindingPatternUnexpectedToken(classifier);
|
| ArrowFormalParametersUnexpectedToken(classifier);
|
|
|
| @@ -3203,7 +3202,7 @@ ParserBase<Impl>::ParseMemberExpressionContinuation(
|
| case Token::TEMPLATE_SPAN:
|
| case Token::TEMPLATE_TAIL: {
|
| *is_async = false;
|
| - Traits::RewriteNonPattern(classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(classifier, CHECK_OK);
|
| BindingPatternUnexpectedToken(classifier);
|
| ArrowFormalParametersUnexpectedToken(classifier);
|
| int pos;
|
| @@ -3257,7 +3256,7 @@ void ParserBase<Impl>::ParseFormalParameter(FormalParametersT* parameters,
|
| ExpressionClassifier init_classifier(this);
|
| initializer = ParseAssignmentExpression(true, &init_classifier,
|
| CHECK_OK_CUSTOM(Void));
|
| - Traits::RewriteNonPattern(&init_classifier, CHECK_OK_CUSTOM(Void));
|
| + impl()->RewriteNonPattern(&init_classifier, CHECK_OK_CUSTOM(Void));
|
| ValidateFormalParameterInitializer(&init_classifier, CHECK_OK_CUSTOM(Void));
|
| parameters->is_simple = false;
|
| init_classifier.Discard();
|
| @@ -3429,14 +3428,14 @@ ParserBase<Impl>::ParseArrowFunctionLiteral(
|
| formal_parameters.scope->AllowsLazyParsing());
|
| if (is_lazily_parsed) {
|
| body = this->NewStatementList(0, zone());
|
| - this->SkipLazyFunctionBody(&materialized_literal_count,
|
| - &expected_property_count, CHECK_OK);
|
| + impl()->SkipLazyFunctionBody(&materialized_literal_count,
|
| + &expected_property_count, CHECK_OK);
|
| if (formal_parameters.materialized_literals_count > 0) {
|
| materialized_literal_count +=
|
| formal_parameters.materialized_literals_count;
|
| }
|
| } else {
|
| - body = this->ParseEagerFunctionBody(
|
| + body = impl()->ParseEagerFunctionBody(
|
| this->EmptyIdentifier(), kNoSourcePosition, formal_parameters,
|
| arrow_kind, FunctionLiteral::kAnonymousExpression, CHECK_OK);
|
| materialized_literal_count =
|
| @@ -3455,22 +3454,22 @@ ParserBase<Impl>::ParseArrowFunctionLiteral(
|
| CHECK_OK);
|
| ExpressionClassifier classifier(this);
|
| if (is_async) {
|
| - this->ParseAsyncArrowSingleExpressionBody(body, accept_IN, &classifier,
|
| - pos, CHECK_OK);
|
| - Traits::RewriteNonPattern(&classifier, CHECK_OK);
|
| + impl()->ParseAsyncArrowSingleExpressionBody(body, accept_IN,
|
| + &classifier, pos, CHECK_OK);
|
| + impl()->RewriteNonPattern(&classifier, CHECK_OK);
|
| } else {
|
| ExpressionT expression =
|
| ParseAssignmentExpression(accept_IN, &classifier, CHECK_OK);
|
| - Traits::RewriteNonPattern(&classifier, CHECK_OK);
|
| + impl()->RewriteNonPattern(&classifier, CHECK_OK);
|
| body->Add(factory()->NewReturnStatement(expression, pos), zone());
|
| if (allow_tailcalls() && !is_sloppy(language_mode())) {
|
| // ES6 14.6.1 Static Semantics: IsInTailPosition
|
| - this->MarkTailPosition(expression);
|
| + impl()->MarkTailPosition(expression);
|
| }
|
| }
|
| materialized_literal_count = function_state.materialized_literal_count();
|
| expected_property_count = function_state.expected_property_count();
|
| - this->MarkCollectedTailCallExpressions();
|
| + impl()->MarkCollectedTailCallExpressions();
|
| }
|
|
|
| formal_parameters.scope->set_end_position(scanner()->location().end_pos);
|
| @@ -3488,9 +3487,9 @@ ParserBase<Impl>::ParseArrowFunctionLiteral(
|
| CheckStrictOctalLiteral(formal_parameters.scope->start_position(),
|
| scanner()->location().end_pos, CHECK_OK);
|
| }
|
| - this->CheckConflictingVarDeclarations(formal_parameters.scope, CHECK_OK);
|
| + impl()->CheckConflictingVarDeclarations(formal_parameters.scope, CHECK_OK);
|
|
|
| - Traits::RewriteDestructuringAssignments();
|
| + impl()->RewriteDestructuringAssignments();
|
| }
|
|
|
| FunctionLiteralT function_literal = factory()->NewFunctionLiteral(
|
| @@ -3531,15 +3530,15 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseTemplateLiteral(
|
| Consume(Token::TEMPLATE_TAIL);
|
| int pos = position();
|
| CheckTemplateOctalLiteral(pos, peek_position(), CHECK_OK);
|
| - typename Traits::TemplateLiteralState ts = Traits::OpenTemplateLiteral(pos);
|
| - Traits::AddTemplateSpan(&ts, true);
|
| - return Traits::CloseTemplateLiteral(&ts, start, tag);
|
| + typename Impl::TemplateLiteralState ts = impl()->OpenTemplateLiteral(pos);
|
| + impl()->AddTemplateSpan(&ts, true);
|
| + return impl()->CloseTemplateLiteral(&ts, start, tag);
|
| }
|
|
|
| Consume(Token::TEMPLATE_SPAN);
|
| int pos = position();
|
| - typename Traits::TemplateLiteralState ts = Traits::OpenTemplateLiteral(pos);
|
| - Traits::AddTemplateSpan(&ts, false);
|
| + typename Impl::TemplateLiteralState ts = impl()->OpenTemplateLiteral(pos);
|
| + impl()->AddTemplateSpan(&ts, false);
|
| Token::Value next;
|
|
|
| // If we open with a TEMPLATE_SPAN, we must scan the subsequent expression,
|
| @@ -3565,8 +3564,8 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseTemplateLiteral(
|
| int expr_pos = peek_position();
|
| ExpressionT expression = this->ParseExpression(true, classifier, CHECK_OK);
|
| CheckNoTailCallExpressions(classifier, CHECK_OK);
|
| - Traits::RewriteNonPattern(classifier, CHECK_OK);
|
| - Traits::AddTemplateExpression(&ts, expression);
|
| + impl()->RewriteNonPattern(classifier, CHECK_OK);
|
| + impl()->AddTemplateExpression(&ts, expression);
|
|
|
| if (peek() != Token::RBRACE) {
|
| ReportMessageAt(Scanner::Location(expr_pos, peek_position()),
|
| @@ -3594,13 +3593,13 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseTemplateLiteral(
|
| return Traits::EmptyExpression();
|
| }
|
|
|
| - Traits::AddTemplateSpan(&ts, next == Token::TEMPLATE_TAIL);
|
| + impl()->AddTemplateSpan(&ts, next == Token::TEMPLATE_TAIL);
|
| } while (next == Token::TEMPLATE_SPAN);
|
|
|
| DCHECK_EQ(next, Token::TEMPLATE_TAIL);
|
| CheckTemplateOctalLiteral(pos, peek_position(), CHECK_OK);
|
| // Once we've reached a TEMPLATE_TAIL, we can close the TemplateLiteral.
|
| - return Traits::CloseTemplateLiteral(&ts, start, tag);
|
| + return impl()->CloseTemplateLiteral(&ts, start, tag);
|
| }
|
|
|
| template <typename Impl>
|
|
|