| Index: src/parsing/parser.cc
|
| diff --git a/src/parsing/parser.cc b/src/parsing/parser.cc
|
| index b7761564f26abe1031a68d1f486f4843d14f61e8..c920c9c87fe78ed50c0ada65bf85ddd35630a486 100644
|
| --- a/src/parsing/parser.cc
|
| +++ b/src/parsing/parser.cc
|
| @@ -2741,8 +2741,7 @@ Statement* Parser::ParseReturnStatement(bool* ok) {
|
| // %_IsJSReceiver(temp) ? temp : 1;
|
|
|
| // temp = expr
|
| - Variable* temp =
|
| - scope()->NewTemporary(ast_value_factory()->empty_string());
|
| + Variable* temp = NewTemporary(ast_value_factory()->empty_string());
|
| Assignment* assign = factory()->NewAssignment(
|
| Token::ASSIGN, factory()->NewVariableProxy(temp), return_value, pos);
|
|
|
| @@ -2884,7 +2883,7 @@ Statement* Parser::ParseSwitchStatement(ZoneList<const AstRawString*>* labels,
|
| Expect(Token::RPAREN, CHECK_OK);
|
|
|
| Variable* tag_variable =
|
| - scope()->NewTemporary(ast_value_factory()->dot_switch_tag_string());
|
| + NewTemporary(ast_value_factory()->dot_switch_tag_string());
|
| Assignment* tag_assign = factory()->NewAssignment(
|
| Token::ASSIGN, factory()->NewVariableProxy(tag_variable), tag,
|
| tag->position());
|
| @@ -3245,8 +3244,7 @@ Statement* Parser::InitializeForEachStatement(ForEachStatement* stmt,
|
| each_keyword_pos);
|
| } else {
|
| if (each->IsArrayLiteral() || each->IsObjectLiteral()) {
|
| - Variable* temp =
|
| - scope()->NewTemporary(ast_value_factory()->empty_string());
|
| + Variable* temp = NewTemporary(ast_value_factory()->empty_string());
|
| VariableProxy* temp_proxy = factory()->NewVariableProxy(temp);
|
| Expression* assign_each = PatternRewriter::RewriteDestructuringAssignment(
|
| this, factory()->NewAssignment(Token::ASSIGN, each, temp_proxy,
|
| @@ -3279,11 +3277,9 @@ Statement* Parser::InitializeForOfStatement(ForOfStatement* for_of,
|
| const int nopos = kNoSourcePosition;
|
| auto avfactory = ast_value_factory();
|
|
|
| - Variable* iterator =
|
| - scope()->NewTemporary(ast_value_factory()->dot_iterator_string());
|
| - Variable* result =
|
| - scope()->NewTemporary(ast_value_factory()->dot_result_string());
|
| - Variable* completion = scope()->NewTemporary(avfactory->empty_string());
|
| + Variable* iterator = NewTemporary(ast_value_factory()->dot_iterator_string());
|
| + Variable* result = NewTemporary(ast_value_factory()->dot_result_string());
|
| + Variable* completion = NewTemporary(avfactory->empty_string());
|
|
|
| // iterator = iterable[Symbol.iterator]()
|
| Expression* assign_iterator;
|
| @@ -3339,7 +3335,7 @@ Statement* Parser::InitializeForOfStatement(ForOfStatement* for_of,
|
| // do { let tmp = #result_value; #set_completion_abrupt; tmp }
|
| // Expression* result_value (gets overwritten)
|
| if (finalize) {
|
| - Variable* var_tmp = scope()->NewTemporary(avfactory->empty_string());
|
| + Variable* var_tmp = NewTemporary(avfactory->empty_string());
|
| Expression* tmp = factory()->NewVariableProxy(var_tmp);
|
| Expression* assignment =
|
| factory()->NewAssignment(Token::ASSIGN, tmp, result_value, nopos);
|
| @@ -3449,7 +3445,7 @@ Statement* Parser::DesugarLexicalBindingsInForStatement(
|
| // make statement: temp_x = x.
|
| for (int i = 0; i < names->length(); i++) {
|
| VariableProxy* proxy = NewUnresolved(names->at(i), LET);
|
| - Variable* temp = scope()->NewTemporary(temp_name);
|
| + Variable* temp = NewTemporary(temp_name);
|
| VariableProxy* temp_proxy = factory()->NewVariableProxy(temp);
|
| Assignment* assignment = factory()->NewAssignment(Token::ASSIGN, temp_proxy,
|
| proxy, kNoSourcePosition);
|
| @@ -3462,7 +3458,7 @@ Statement* Parser::DesugarLexicalBindingsInForStatement(
|
| Variable* first = NULL;
|
| // Make statement: first = 1.
|
| if (next) {
|
| - first = scope()->NewTemporary(temp_name);
|
| + first = NewTemporary(temp_name);
|
| VariableProxy* first_proxy = factory()->NewVariableProxy(first);
|
| Expression* const1 = factory()->NewSmiLiteral(1, kNoSourcePosition);
|
| Assignment* assignment = factory()->NewAssignment(
|
| @@ -3537,7 +3533,7 @@ Statement* Parser::DesugarLexicalBindingsInForStatement(
|
| ignore_completion_block->statements()->Add(clear_first_or_next, zone());
|
| }
|
|
|
| - Variable* flag = scope()->NewTemporary(temp_name);
|
| + Variable* flag = NewTemporary(temp_name);
|
| // Make statement: flag = 1.
|
| {
|
| VariableProxy* flag_proxy = factory()->NewVariableProxy(flag);
|
| @@ -3746,8 +3742,7 @@ Statement* Parser::ParseForStatement(ZoneList<const AstRawString*>* labels,
|
| // let x; // for TDZ
|
| // }
|
|
|
| - Variable* temp =
|
| - scope()->NewTemporary(ast_value_factory()->dot_for_string());
|
| + Variable* temp = NewTemporary(ast_value_factory()->dot_for_string());
|
| ForEachStatement* loop =
|
| factory()->NewForEachStatement(mode, labels, stmt_pos);
|
| Target target(&this->target_stack_, loop);
|
| @@ -4139,8 +4134,8 @@ void Parser::DesugarAsyncFunctionBody(const AstRawString* function_name,
|
| // }
|
| // }
|
| scope->ForceContextAllocation();
|
| - Variable* temp = this->scope()->NewTemporary(
|
| - ast_value_factory()->dot_generator_object_string());
|
| + Variable* temp =
|
| + NewTemporary(ast_value_factory()->dot_generator_object_string());
|
| function_state_->set_generator_object_variable(temp);
|
|
|
| Expression* init_generator_variable = factory()->NewAssignment(
|
| @@ -4178,8 +4173,7 @@ DoExpression* Parser::ParseDoExpression(bool* ok) {
|
| int pos = peek_position();
|
|
|
| Expect(Token::DO, CHECK_OK);
|
| - Variable* result =
|
| - scope()->NewTemporary(ast_value_factory()->dot_result_string());
|
| + Variable* result = NewTemporary(ast_value_factory()->dot_result_string());
|
| Block* block = ParseBlock(nullptr, CHECK_OK);
|
| DoExpression* expr = factory()->NewDoExpression(block, result, pos);
|
| if (!Rewriter::Rewrite(this, GetClosureScope(), expr, ast_value_factory())) {
|
| @@ -4382,8 +4376,8 @@ FunctionLiteral* Parser::ParseFunctionLiteral(
|
| // Calling a generator returns a generator object. That object is stored
|
| // in a temporary variable, a definition that is used by "yield"
|
| // expressions. This also marks the FunctionState as a generator.
|
| - Variable* temp = this->scope()->NewTemporary(
|
| - ast_value_factory()->dot_generator_object_string());
|
| + Variable* temp =
|
| + NewTemporary(ast_value_factory()->dot_generator_object_string());
|
| function_state.set_generator_object_variable(temp);
|
| }
|
|
|
| @@ -5105,8 +5099,7 @@ Expression* Parser::ParseClassLiteral(ExpressionClassifier* classifier,
|
| }
|
|
|
| Block* do_block = factory()->NewBlock(nullptr, 1, false, pos);
|
| - Variable* result_var =
|
| - scope()->NewTemporary(ast_value_factory()->empty_string());
|
| + Variable* result_var = NewTemporary(ast_value_factory()->empty_string());
|
| do_block->set_scope(block_state.FinalizedBlockScope());
|
| DoExpression* do_expr = factory()->NewDoExpression(do_block, result_var, pos);
|
|
|
| @@ -5711,8 +5704,7 @@ Expression* Parser::SpreadCall(Expression* function,
|
| args->InsertAt(0, function, zone());
|
| args->InsertAt(1, home, zone());
|
| } else {
|
| - Variable* temp =
|
| - scope()->NewTemporary(ast_value_factory()->empty_string());
|
| + Variable* temp = NewTemporary(ast_value_factory()->empty_string());
|
| VariableProxy* obj = factory()->NewVariableProxy(temp);
|
| Assignment* assign_obj = factory()->NewAssignment(
|
| Token::ASSIGN, obj, function->AsProperty()->obj(),
|
| @@ -5817,8 +5809,8 @@ Expression* ParserTraits::RewriteAwaitExpression(Expression* value,
|
| auto factory = parser_->factory();
|
| const int nopos = kNoSourcePosition;
|
|
|
| - Variable* temp_var = parser_->scope()->NewTemporary(
|
| - parser_->ast_value_factory()->empty_string());
|
| + Variable* temp_var =
|
| + parser_->NewTemporary(parser_->ast_value_factory()->empty_string());
|
| VariableProxy* temp_proxy = factory->NewVariableProxy(temp_var);
|
| Block* do_block = factory->NewBlock(nullptr, 2, false, nopos);
|
|
|
| @@ -5961,8 +5953,8 @@ Expression* Parser::RewriteAssignExponentiation(Expression* left,
|
| return factory()->NewAssignment(Token::ASSIGN, result, call, pos);
|
| } else if (left->IsProperty()) {
|
| Property* prop = left->AsProperty();
|
| - auto temp_obj = scope()->NewTemporary(ast_value_factory()->empty_string());
|
| - auto temp_key = scope()->NewTemporary(ast_value_factory()->empty_string());
|
| + auto temp_obj = NewTemporary(ast_value_factory()->empty_string());
|
| + auto temp_key = NewTemporary(ast_value_factory()->empty_string());
|
| Expression* assign_obj = factory()->NewAssignment(
|
| Token::ASSIGN, factory()->NewVariableProxy(temp_obj), prop->obj(),
|
| kNoSourcePosition);
|
| @@ -6005,8 +5997,7 @@ Expression* Parser::RewriteSpreads(ArrayLiteral* lit) {
|
| // where $R, $i and $j are fresh temporary variables.
|
| ZoneList<Expression*>::iterator s = lit->FirstSpread();
|
| if (s == lit->EndValue()) return nullptr; // no spread, no rewriting...
|
| - Variable* result =
|
| - scope()->NewTemporary(ast_value_factory()->dot_result_string());
|
| + Variable* result = NewTemporary(ast_value_factory()->dot_result_string());
|
| // NOTE: The value assigned to R is the whole original array literal,
|
| // spreads included. This will be fixed before the rewritten AST is returned.
|
| // $R = lit
|
| @@ -6034,8 +6025,7 @@ Expression* Parser::RewriteSpreads(ArrayLiteral* lit) {
|
| zone());
|
| } else {
|
| // If it's a spread, we're adding a for/of loop iterating through it.
|
| - Variable* each =
|
| - scope()->NewTemporary(ast_value_factory()->dot_for_string());
|
| + Variable* each = NewTemporary(ast_value_factory()->dot_for_string());
|
| Expression* subject = spread->expression();
|
| // %AppendElement($R, each)
|
| Statement* append_body;
|
| @@ -6220,7 +6210,6 @@ Expression* ParserTraits::RewriteYieldStar(
|
|
|
| auto factory = parser_->factory();
|
| auto avfactory = parser_->ast_value_factory();
|
| - auto scope = parser_->scope();
|
| auto zone = parser_->zone();
|
|
|
|
|
| @@ -6229,7 +6218,7 @@ Expression* ParserTraits::RewriteYieldStar(
|
|
|
|
|
| // let input = undefined;
|
| - Variable* var_input = scope->NewTemporary(avfactory->empty_string());
|
| + Variable* var_input = parser_->NewTemporary(avfactory->empty_string());
|
| Statement* initialize_input;
|
| {
|
| Expression* input_proxy = factory->NewVariableProxy(var_input);
|
| @@ -6240,7 +6229,7 @@ Expression* ParserTraits::RewriteYieldStar(
|
|
|
|
|
| // let mode = kNext;
|
| - Variable* var_mode = scope->NewTemporary(avfactory->empty_string());
|
| + Variable* var_mode = parser_->NewTemporary(avfactory->empty_string());
|
| Statement* initialize_mode;
|
| {
|
| Expression* mode_proxy = factory->NewVariableProxy(var_mode);
|
| @@ -6252,7 +6241,7 @@ Expression* ParserTraits::RewriteYieldStar(
|
|
|
|
|
| // let output = undefined;
|
| - Variable* var_output = scope->NewTemporary(avfactory->empty_string());
|
| + Variable* var_output = parser_->NewTemporary(avfactory->empty_string());
|
| Statement* initialize_output;
|
| {
|
| Expression* output_proxy = factory->NewVariableProxy(var_output);
|
| @@ -6264,7 +6253,7 @@ Expression* ParserTraits::RewriteYieldStar(
|
|
|
|
|
| // let iterator = iterable[Symbol.iterator];
|
| - Variable* var_iterator = scope->NewTemporary(avfactory->empty_string());
|
| + Variable* var_iterator = parser_->NewTemporary(avfactory->empty_string());
|
| Statement* get_iterator;
|
| {
|
| Expression* iterator = GetIterator(iterable, factory, nopos);
|
| @@ -6344,7 +6333,7 @@ Expression* ParserTraits::RewriteYieldStar(
|
|
|
|
|
| // let iteratorThrow = iterator.throw;
|
| - Variable* var_throw = scope->NewTemporary(avfactory->empty_string());
|
| + Variable* var_throw = parser_->NewTemporary(avfactory->empty_string());
|
| Statement* get_throw;
|
| {
|
| Expression* iterator_proxy = factory->NewVariableProxy(var_iterator);
|
| @@ -6539,7 +6528,7 @@ Expression* ParserTraits::RewriteYieldStar(
|
| Block* catch_block = factory->NewBlock(nullptr, 1, false, nopos);
|
| catch_block->statements()->Add(set_mode_throw, zone);
|
|
|
| - Scope* catch_scope = NewScopeWithParent(scope, CATCH_SCOPE);
|
| + Scope* catch_scope = NewScope(CATCH_SCOPE);
|
| catch_scope->set_is_hidden();
|
| const AstRawString* name = avfactory->dot_catch_string();
|
| Variable* catch_variable =
|
| @@ -6631,9 +6620,11 @@ Expression* ParserTraits::RewriteYieldStar(
|
| do_block->statements()->Add(do_block_, zone);
|
| do_block->statements()->Add(get_value, zone);
|
|
|
| - Variable* dot_result = scope->NewTemporary(avfactory->dot_result_string());
|
| + Variable* dot_result =
|
| + parser_->NewTemporary(avfactory->dot_result_string());
|
| yield_star = factory->NewDoExpression(do_block, dot_result, nopos);
|
| - Rewriter::Rewrite(parser_, scope->GetClosureScope(), yield_star, avfactory);
|
| + Rewriter::Rewrite(parser_, parser_->GetClosureScope(), yield_star,
|
| + avfactory);
|
| }
|
|
|
| return yield_star;
|
| @@ -6904,12 +6895,11 @@ void ParserTraits::BuildIteratorCloseForCompletion(
|
| const int nopos = kNoSourcePosition;
|
| auto factory = parser_->factory();
|
| auto avfactory = parser_->ast_value_factory();
|
| - auto scope = parser_->scope();
|
| auto zone = parser_->zone();
|
|
|
|
|
| // let iteratorReturn = iterator.return;
|
| - Variable* var_return = scope->NewTemporary(avfactory->empty_string());
|
| + Variable* var_return = parser_->NewTemporary(avfactory->empty_string());
|
| Statement* get_return;
|
| {
|
| Expression* iterator_proxy = factory->NewVariableProxy(iterator);
|
| @@ -6950,7 +6940,7 @@ void ParserTraits::BuildIteratorCloseForCompletion(
|
|
|
| Block* catch_block = factory->NewBlock(nullptr, 0, false, nopos);
|
|
|
| - Scope* catch_scope = NewScopeWithParent(scope, CATCH_SCOPE);
|
| + Scope* catch_scope = NewScope(CATCH_SCOPE);
|
| Variable* catch_variable = catch_scope->DeclareLocal(
|
| avfactory->dot_catch_string(), VAR, kCreatedInitialized,
|
| Variable::NORMAL);
|
| @@ -6966,7 +6956,7 @@ void ParserTraits::BuildIteratorCloseForCompletion(
|
| // }
|
| Block* validate_return;
|
| {
|
| - Variable* var_output = scope->NewTemporary(avfactory->empty_string());
|
| + Variable* var_output = parser_->NewTemporary(avfactory->empty_string());
|
| Statement* call_return;
|
| {
|
| auto args = new (zone) ZoneList<Expression*>(2, zone);
|
|
|