Index: src/parsing/parser-base.h |
diff --git a/src/parsing/parser-base.h b/src/parsing/parser-base.h |
index ff8f19be381dba783d57ecb31525e2e1b6d97e54..062679d298f47bbd9705be8f437d044128f6343a 100644 |
--- a/src/parsing/parser-base.h |
+++ b/src/parsing/parser-base.h |
@@ -340,14 +340,6 @@ class ParserBase { |
expressions_.Add(expr, zone_); |
} |
- void AddExplicitTailCall(ExpressionT expr, const Scanner::Location& loc) { |
- if (!has_explicit_tail_calls()) { |
- loc_ = loc; |
- has_explicit_tail_calls_ = true; |
- } |
- expressions_.Add(expr, zone_); |
- } |
- |
void Append(const TailCallExpressionList& other) { |
if (!has_explicit_tail_calls()) { |
loc_ = other.loc_; |
@@ -437,14 +429,6 @@ class ParserBase { |
tail_call_expressions_.AddImplicitTailCall(expression); |
} |
} |
- void AddExplicitTailCallExpression(ExpressionT expression, |
- const Scanner::Location& loc) { |
- DCHECK(expression->IsCall()); |
- if (return_expr_context() == |
- ReturnExprContext::kInsideValidReturnStatement) { |
- tail_call_expressions_.AddExplicitTailCall(expression, loc); |
- } |
- } |
ZoneList<typename ExpressionClassifier::Error>* GetReportedErrorList() { |
return &reported_errors_; |
@@ -1057,14 +1041,6 @@ class ParserBase { |
} |
} |
- void CheckNoTailCallExpressions(bool* ok) { |
- if (FLAG_harmony_explicit_tailcalls && |
- classifier()->has_tail_call_expression()) { |
- ReportClassifierError(classifier()->tail_call_expression_error()); |
- *ok = false; |
- } |
- } |
- |
void ExpressionUnexpectedToken() { |
MessageTemplate::Template message = MessageTemplate::kUnexpectedToken; |
const char* arg; |
@@ -1175,7 +1151,6 @@ class ParserBase { |
ExpressionT ParseAssignmentExpression(bool accept_IN, bool* ok); |
ExpressionT ParseYieldExpression(bool accept_IN, bool* ok); |
- ExpressionT ParseTailCallExpression(bool* ok); |
ExpressionT ParseConditionalExpression(bool accept_IN, bool* ok); |
ExpressionT ParseBinaryExpression(int prec, bool accept_IN, bool* ok); |
ExpressionT ParseUnaryExpression(bool* ok); |
@@ -1857,7 +1832,6 @@ ParserBase<Impl>::ParseExpressionCoverGrammar(bool accept_IN, bool* ok) { |
ExpressionT result = impl()->EmptyExpression(); |
while (true) { |
- CheckNoTailCallExpressions(CHECK_OK); |
int comma_pos = position(); |
ExpressionClassifier binding_classifier(this); |
ExpressionT right; |
@@ -1926,7 +1900,6 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseArrayLiteral( |
Consume(Token::ELLIPSIS); |
int expr_pos = peek_position(); |
ExpressionT argument = ParseAssignmentExpression(true, CHECK_OK); |
- CheckNoTailCallExpressions(CHECK_OK); |
elem = factory()->NewSpread(argument, start_pos, expr_pos); |
if (first_spread_index < 0) { |
@@ -1950,7 +1923,6 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseArrayLiteral( |
} else { |
int beg_pos = peek_position(); |
elem = ParseAssignmentExpression(true, CHECK_OK); |
- CheckNoTailCallExpressions(CHECK_OK); |
CheckDestructuringElement(elem, beg_pos, scanner()->location().end_pos); |
} |
values->Add(elem, zone_); |
@@ -2535,7 +2507,6 @@ typename ParserBase<Impl>::ExpressionListT ParserBase<Impl>::ParseArguments( |
ExpressionT argument = |
ParseAssignmentExpression(true, CHECK_OK_CUSTOM(NullExpressionList)); |
- CheckNoTailCallExpressions(CHECK_OK_CUSTOM(NullExpressionList)); |
if (!maybe_arrow) { |
impl()->RewriteNonPattern(CHECK_OK_CUSTOM(NullExpressionList)); |
} |
@@ -2727,8 +2698,6 @@ ParserBase<Impl>::ParseAssignmentExpression(bool accept_IN, bool* ok) { |
impl()->Accumulate(productions, false); |
} |
- CheckNoTailCallExpressions(CHECK_OK); |
- |
if (is_destructuring_assignment) { |
ValidateAssignmentPattern(CHECK_OK); |
} else { |
@@ -2750,7 +2719,6 @@ ParserBase<Impl>::ParseAssignmentExpression(bool accept_IN, bool* ok) { |
ExpressionClassifier rhs_classifier(this); |
ExpressionT right = ParseAssignmentExpression(accept_IN, CHECK_OK); |
- CheckNoTailCallExpressions(CHECK_OK); |
impl()->RewriteNonPattern(CHECK_OK); |
impl()->AccumulateFormalParameterContainmentErrors(); |
@@ -2847,75 +2815,6 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseYieldExpression( |
return yield; |
} |
-template <typename Impl> |
-typename ParserBase<Impl>::ExpressionT |
-ParserBase<Impl>::ParseTailCallExpression(bool* ok) { |
- // TailCallExpression:: |
- // 'continue' MemberExpression Arguments |
- // 'continue' CallExpression Arguments |
- // 'continue' MemberExpression TemplateLiteral |
- // 'continue' CallExpression TemplateLiteral |
- Expect(Token::CONTINUE, CHECK_OK); |
- int pos = position(); |
- int sub_expression_pos = peek_position(); |
- ExpressionT expression = ParseLeftHandSideExpression(CHECK_OK); |
- CheckNoTailCallExpressions(CHECK_OK); |
- |
- Scanner::Location loc(pos, scanner()->location().end_pos); |
- |
- if (!expression->IsCall()) { |
- Scanner::Location sub_loc(sub_expression_pos, loc.end_pos); |
- impl()->ReportMessageAt(sub_loc, |
- MessageTemplate::kUnexpectedInsideTailCall); |
- *ok = false; |
- return impl()->EmptyExpression(); |
- } |
- if (impl()->IsDirectEvalCall(expression)) { |
- Scanner::Location sub_loc(sub_expression_pos, loc.end_pos); |
- impl()->ReportMessageAt(sub_loc, |
- MessageTemplate::kUnexpectedTailCallOfEval); |
- *ok = false; |
- return impl()->EmptyExpression(); |
- } |
- if (!is_strict(language_mode())) { |
- impl()->ReportMessageAt(loc, MessageTemplate::kUnexpectedSloppyTailCall); |
- *ok = false; |
- return impl()->EmptyExpression(); |
- } |
- if (is_resumable()) { |
- Scanner::Location sub_loc(sub_expression_pos, loc.end_pos); |
- impl()->ReportMessageAt(sub_loc, MessageTemplate::kUnexpectedTailCall); |
- *ok = false; |
- return impl()->EmptyExpression(); |
- } |
- ReturnExprContext return_expr_context = |
- function_state_->return_expr_context(); |
- if (return_expr_context != ReturnExprContext::kInsideValidReturnStatement) { |
- MessageTemplate::Template msg = MessageTemplate::kNone; |
- switch (return_expr_context) { |
- case ReturnExprContext::kInsideValidReturnStatement: |
- UNREACHABLE(); |
- return impl()->EmptyExpression(); |
- case ReturnExprContext::kInsideValidBlock: |
- msg = MessageTemplate::kUnexpectedTailCall; |
- break; |
- case ReturnExprContext::kInsideTryBlock: |
- msg = MessageTemplate::kUnexpectedTailCallInTryBlock; |
- break; |
- case ReturnExprContext::kInsideForInOfBody: |
- msg = MessageTemplate::kUnexpectedTailCallInForInOf; |
- break; |
- } |
- impl()->ReportMessageAt(loc, msg); |
- *ok = false; |
- return impl()->EmptyExpression(); |
- } |
- classifier()->RecordTailCallExpressionError( |
- loc, MessageTemplate::kUnexpectedTailCall); |
- function_state_->AddExplicitTailCallExpression(expression, loc); |
- return expression; |
-} |
- |
// Precedence = 3 |
template <typename Impl> |
typename ParserBase<Impl>::ExpressionT |
@@ -2929,7 +2828,6 @@ ParserBase<Impl>::ParseConditionalExpression(bool accept_IN, |
// We start using the binary expression parser for prec >= 4 only! |
ExpressionT expression = ParseBinaryExpression(4, accept_IN, CHECK_OK); |
if (peek() != Token::CONDITIONAL) return expression; |
- CheckNoTailCallExpressions(CHECK_OK); |
impl()->RewriteNonPattern(CHECK_OK); |
BindingPatternUnexpectedToken(); |
ArrowFormalParametersUnexpectedToken(); |
@@ -2955,7 +2853,6 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseBinaryExpression( |
for (int prec1 = Precedence(peek(), accept_IN); prec1 >= prec; prec1--) { |
// prec1 >= 4 |
while (Precedence(peek(), accept_IN) == prec1) { |
- CheckNoTailCallExpressions(CHECK_OK); |
impl()->RewriteNonPattern(CHECK_OK); |
BindingPatternUnexpectedToken(); |
ArrowFormalParametersUnexpectedToken(); |
@@ -2965,9 +2862,6 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseBinaryExpression( |
const bool is_right_associative = op == Token::EXP; |
const int next_prec = is_right_associative ? prec1 : prec1 + 1; |
ExpressionT y = ParseBinaryExpression(next_prec, accept_IN, CHECK_OK); |
- if (op != Token::OR && op != Token::AND) { |
- CheckNoTailCallExpressions(CHECK_OK); |
- } |
impl()->RewriteNonPattern(CHECK_OK); |
if (impl()->ShortcutNumericLiteralBinaryExpression(&x, y, op, pos)) { |
@@ -3025,7 +2919,6 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseUnaryExpression( |
op = Next(); |
int pos = position(); |
ExpressionT expression = ParseUnaryExpression(CHECK_OK); |
- CheckNoTailCallExpressions(CHECK_OK); |
impl()->RewriteNonPattern(CHECK_OK); |
if (op == Token::DELETE && is_strict(language_mode())) { |
@@ -3051,7 +2944,6 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseUnaryExpression( |
op = Next(); |
int beg_pos = peek_position(); |
ExpressionT expression = ParseUnaryExpression(CHECK_OK); |
- CheckNoTailCallExpressions(CHECK_OK); |
expression = CheckAndRewriteReferenceExpression( |
expression, beg_pos, scanner()->location().end_pos, |
MessageTemplate::kInvalidLhsInPrefixOp, CHECK_OK); |
@@ -3089,7 +2981,6 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParsePostfixExpression( |
ExpressionT expression = ParseLeftHandSideExpression(CHECK_OK); |
if (!scanner()->HasAnyLineTerminatorBeforeNext() && |
Token::IsCountOp(peek())) { |
- CheckNoTailCallExpressions(CHECK_OK); |
BindingPatternUnexpectedToken(); |
ArrowFormalParametersUnexpectedToken(); |
@@ -3115,10 +3006,6 @@ ParserBase<Impl>::ParseLeftHandSideExpression(bool* ok) { |
// LeftHandSideExpression :: |
// (NewExpression | MemberExpression) ... |
- if (FLAG_harmony_explicit_tailcalls && peek() == Token::CONTINUE) { |
- return ParseTailCallExpression(ok); |
- } |
- |
bool is_async = false; |
ExpressionT result = |
ParseMemberWithNewPrefixesExpression(&is_async, CHECK_OK); |
@@ -3126,7 +3013,6 @@ ParserBase<Impl>::ParseLeftHandSideExpression(bool* ok) { |
while (true) { |
switch (peek()) { |
case Token::LBRACK: { |
- CheckNoTailCallExpressions(CHECK_OK); |
impl()->RewriteNonPattern(CHECK_OK); |
BindingPatternUnexpectedToken(); |
ArrowFormalParametersUnexpectedToken(); |
@@ -3140,7 +3026,6 @@ ParserBase<Impl>::ParseLeftHandSideExpression(bool* ok) { |
} |
case Token::LPAREN: { |
- CheckNoTailCallExpressions(CHECK_OK); |
int pos; |
impl()->RewriteNonPattern(CHECK_OK); |
BindingPatternUnexpectedToken(); |
@@ -3228,7 +3113,6 @@ ParserBase<Impl>::ParseLeftHandSideExpression(bool* ok) { |
} |
case Token::PERIOD: { |
- CheckNoTailCallExpressions(CHECK_OK); |
impl()->RewriteNonPattern(CHECK_OK); |
BindingPatternUnexpectedToken(); |
ArrowFormalParametersUnexpectedToken(); |
@@ -3243,7 +3127,6 @@ ParserBase<Impl>::ParseLeftHandSideExpression(bool* ok) { |
case Token::TEMPLATE_SPAN: |
case Token::TEMPLATE_TAIL: { |
- CheckNoTailCallExpressions(CHECK_OK); |
impl()->RewriteNonPattern(CHECK_OK); |
BindingPatternUnexpectedToken(); |
ArrowFormalParametersUnexpectedToken(); |
@@ -4071,7 +3954,6 @@ typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseTemplateLiteral( |
int expr_pos = peek_position(); |
ExpressionT expression = ParseExpressionCoverGrammar(true, CHECK_OK); |
- CheckNoTailCallExpressions(CHECK_OK); |
impl()->RewriteNonPattern(CHECK_OK); |
impl()->AddTemplateExpression(&ts, expression); |
@@ -4990,16 +4872,6 @@ typename ParserBase<Impl>::StatementT ParserBase<Impl>::ParseTryStatement( |
DCHECK(peek() == Token::FINALLY || !impl()->IsNullStatement(catch_block)); |
if (Check(Token::FINALLY)) { |
finally_block = ParseBlock(nullptr, CHECK_OK); |
- |
- if (FLAG_harmony_explicit_tailcalls && |
- catch_info.tail_call_expressions.has_explicit_tail_calls()) { |
- // TODO(ishell): update chapter number. |
- // ES8 XX.YY.ZZ |
- impl()->ReportMessageAt(catch_info.tail_call_expressions.location(), |
- MessageTemplate::kUnexpectedTailCallInCatchBlock); |
- *ok = false; |
- return impl()->NullStatement(); |
- } |
} |
return impl()->RewriteTryStatement(try_block, catch_block, finally_block, |