Index: src/parsing/parser.cc |
diff --git a/src/parsing/parser.cc b/src/parsing/parser.cc |
index 69cea62d827034bcd931b4661e13afdccda12db5..717b3f6491fa3cf1b44d050e75b11debf0df30d5 100644 |
--- a/src/parsing/parser.cc |
+++ b/src/parsing/parser.cc |
@@ -764,6 +764,9 @@ ClassLiteral* ParserTraits::ParseClassLiteral( |
name_is_strict_reserved, pos, ok); |
} |
+void ParserTraits::MarkTailPosition(Expression* expression) { |
+ expression->MarkTail(); |
+} |
Parser::Parser(ParseInfo* info) |
: ParserBase<ParserTraits>(info->zone(), &scanner_, info->stack_limit(), |
@@ -3594,6 +3597,8 @@ Statement* Parser::ParseForStatement(ZoneList<const AstRawString*>* labels, |
factory()->NewBlock(NULL, 3, false, RelocInfo::kNoPosition); |
{ |
+ DontCollectExpressionsInTailPositionScope no_tail_calls( |
+ function_state_); |
BlockState block_state(&scope_, body_scope); |
Statement* body = ParseScopedStatement(NULL, true, CHECK_OK); |
@@ -4650,7 +4655,7 @@ ZoneList<Statement*>* Parser::ParseEagerFunctionBody( |
const List<Expression*>& expressions_in_tail_position = |
function_state_->expressions_in_tail_position(); |
for (int i = 0; i < expressions_in_tail_position.length(); ++i) { |
- expressions_in_tail_position[i]->MarkTail(); |
+ MarkTailPosition(expressions_in_tail_position[i]); |
} |
return result; |
} |