Index: runtime/vm/ast_transformer.cc |
diff --git a/runtime/vm/ast_transformer.cc b/runtime/vm/ast_transformer.cc |
index 4b058676fa08bc1867077e1510ef91eda954954d..2137931d3acd75f4b2a66044a748573e861fa421 100644 |
--- a/runtime/vm/ast_transformer.cc |
+++ b/runtime/vm/ast_transformer.cc |
@@ -73,7 +73,7 @@ LocalVariable* AwaitTransformer::EnsureCurrentTempVar() { |
LocalVariable* await_tmp = async_temp_scope_->LocalLookupVariable(symbol); |
if (await_tmp == NULL) { |
// We need a new temp variable; add it to the function's top scope. |
- await_tmp = new (Z) LocalVariable( |
+ await_tmp = new(Z) LocalVariable( |
TokenPosition::kNoSource, symbol, Object::dynamic_type()); |
async_temp_scope_->AddVariable(await_tmp); |
// After adding it to the top scope, we can look it up from the preamble. |
@@ -92,7 +92,7 @@ LocalVariable* AwaitTransformer::GetVariableInScope(LocalScope* scope, |
} |
-LocalVariable* AwaitTransformer::AddToPreambleNewTempVar( |
+LocalVariable* AwaitTransformer::AddNewTempVarToPreamble( |
AstNode* node, |
TokenPosition token_pos) { |
LocalVariable* tmp_var = EnsureCurrentTempVar(); |
@@ -103,6 +103,12 @@ LocalVariable* AwaitTransformer::AddToPreambleNewTempVar( |
} |
+LoadLocalNode* AwaitTransformer::MakeName(AstNode* node) { |
+ LocalVariable* temp = AddNewTempVarToPreamble(node, ST(node->token_pos())); |
+ return new(Z) LoadLocalNode(ST(node->token_pos()), temp); |
+} |
+ |
+ |
void AwaitTransformer::VisitLiteralNode(LiteralNode* node) { |
result_ = node; |
} |
@@ -140,11 +146,11 @@ void AwaitTransformer::VisitAwaitNode(AwaitNode* node) { |
preamble_->scope(), Symbols::AsyncOperationStackTraceParam()); |
AstNode* transformed_expr = Transform(node->expr()); |
- LocalVariable* await_temp = AddToPreambleNewTempVar(transformed_expr, |
+ LocalVariable* await_temp = AddNewTempVarToPreamble(transformed_expr, |
ST(node->token_pos())); |
AwaitMarkerNode* await_marker = |
- new (Z) AwaitMarkerNode(async_temp_scope_, node->scope(), token_pos); |
+ new(Z) AwaitMarkerNode(async_temp_scope_, node->scope(), token_pos); |
preamble_->Add(await_marker); |
// :result_param = _awaitHelper( |
@@ -154,14 +160,14 @@ void AwaitTransformer::VisitAwaitNode(AwaitNode* node) { |
Z, async_lib.LookupFunctionAllowPrivate(Symbols::AsyncAwaitHelper())); |
ASSERT(!async_await_helper.IsNull()); |
ArgumentListNode* async_await_helper_args = |
- new (Z) ArgumentListNode(token_pos); |
+ new(Z) ArgumentListNode(token_pos); |
async_await_helper_args->Add( |
new(Z) LoadLocalNode(token_pos, await_temp)); |
async_await_helper_args->Add( |
new(Z) LoadLocalNode(token_pos, async_then_callback)); |
async_await_helper_args->Add( |
new(Z) LoadLocalNode(token_pos, async_catch_error_callback)); |
- StaticCallNode* await_helper_call = new (Z) StaticCallNode( |
+ StaticCallNode* await_helper_call = new(Z) StaticCallNode( |
node->token_pos(), |
async_await_helper, |
async_await_helper_args); |
@@ -177,17 +183,17 @@ void AwaitTransformer::VisitAwaitNode(AwaitNode* node) { |
// restoring the saved try context that lives on the stack and possibly the |
// saved try context of the outer try block. |
if (node->saved_try_ctx() != NULL) { |
- preamble_->Add(new (Z) StoreLocalNode( |
+ preamble_->Add(new(Z) StoreLocalNode( |
token_pos, |
node->saved_try_ctx(), |
- new (Z) LoadLocalNode(token_pos, |
- node->async_saved_try_ctx()))); |
+ new(Z) LoadLocalNode(token_pos, |
+ node->async_saved_try_ctx()))); |
if (node->outer_saved_try_ctx() != NULL) { |
- preamble_->Add(new (Z) StoreLocalNode( |
+ preamble_->Add(new(Z) StoreLocalNode( |
token_pos, |
node->outer_saved_try_ctx(), |
- new (Z) LoadLocalNode(token_pos, |
- node->outer_async_saved_try_ctx()))); |
+ new(Z) LoadLocalNode(token_pos, |
+ node->outer_async_saved_try_ctx()))); |
} |
} else { |
ASSERT(node->outer_saved_try_ctx() == NULL); |
@@ -195,31 +201,31 @@ void AwaitTransformer::VisitAwaitNode(AwaitNode* node) { |
// Load the async_op variable. It is unused, but the observatory uses it |
// to determine if a breakpoint is inside an asynchronous function. |
- LoadLocalNode* load_async_op = new (Z) LoadLocalNode(token_pos, async_op); |
+ LoadLocalNode* load_async_op = new(Z) LoadLocalNode(token_pos, async_op); |
preamble_->Add(load_async_op); |
- LoadLocalNode* load_error_param = new (Z) LoadLocalNode( |
+ LoadLocalNode* load_error_param = new(Z) LoadLocalNode( |
token_pos, error_param); |
- LoadLocalNode* load_stack_trace_param = new (Z) LoadLocalNode( |
+ LoadLocalNode* load_stack_trace_param = new(Z) LoadLocalNode( |
token_pos, stack_trace_param); |
- SequenceNode* error_ne_null_branch = new (Z) SequenceNode( |
+ SequenceNode* error_ne_null_branch = new(Z) SequenceNode( |
token_pos, ChainNewScope(preamble_->scope())); |
- error_ne_null_branch->Add(new (Z) ThrowNode( |
+ error_ne_null_branch->Add(new(Z) ThrowNode( |
token_pos, |
load_error_param, |
load_stack_trace_param)); |
- preamble_->Add(new (Z) IfNode( |
+ preamble_->Add(new(Z) IfNode( |
token_pos, |
- new (Z) ComparisonNode( |
+ new(Z) ComparisonNode( |
token_pos, |
Token::kNE, |
load_error_param, |
- new (Z) LiteralNode(token_pos, |
+ new(Z) LiteralNode(token_pos, |
Object::null_instance())), |
error_ne_null_branch, |
NULL)); |
- LocalVariable* result = AddToPreambleNewTempVar(new(Z) LoadLocalNode( |
+ LocalVariable* result = AddNewTempVarToPreamble(new(Z) LoadLocalNode( |
token_pos, result_param), ST(node->token_pos())); |
result_ = new(Z) LoadLocalNode(token_pos, result); |
} |
@@ -247,7 +253,7 @@ AstNode* AwaitTransformer::LazyTransform(const Token::Kind logical_op, |
AstNode* result = NULL; |
const Token::Kind compare_logical_op = (logical_op == Token::kAND) ? |
Token::kEQ : Token::kNE; |
- SequenceNode* eval = new (Z) SequenceNode( |
+ SequenceNode* eval = new(Z) SequenceNode( |
ST(new_left->token_pos()), ChainNewScope(preamble_->scope())); |
SequenceNode* saved_preamble = preamble_; |
preamble_ = eval; |
@@ -268,7 +274,7 @@ AstNode* AwaitTransformer::LazyTransform(const Token::Kind logical_op, |
LocalScope* AwaitTransformer::ChainNewScope(LocalScope* parent) { |
- return new (Z) LocalScope( |
+ return new(Z) LocalScope( |
parent, parent->function_level(), parent->loop_level()); |
} |
@@ -282,12 +288,10 @@ void AwaitTransformer::VisitBinaryOpNode(BinaryOpNode* node) { |
} else { |
new_right = Transform(node->right()); |
} |
- LocalVariable* result = AddToPreambleNewTempVar( |
- new(Z) BinaryOpNode(node->token_pos(), |
- node->kind(), |
- new_left, |
- new_right), ST(node->token_pos())); |
- result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result); |
+ result_ = MakeName(new(Z) BinaryOpNode(node->token_pos(), |
+ node->kind(), |
+ new_left, |
+ new_right)); |
} |
@@ -296,34 +300,29 @@ void AwaitTransformer::VisitBinaryOpWithMask32Node( |
ASSERT((node->kind() != Token::kAND) && (node->kind() != Token::kOR)); |
AstNode* new_left = Transform(node->left()); |
AstNode* new_right = Transform(node->right()); |
- LocalVariable* result = AddToPreambleNewTempVar( |
- new(Z) BinaryOpWithMask32Node(node->token_pos(), |
- node->kind(), |
- new_left, |
- new_right, |
- node->mask32()), ST(node->token_pos())); |
- result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result); |
+ result_ = MakeName(new(Z) BinaryOpWithMask32Node(node->token_pos(), |
+ node->kind(), |
+ new_left, |
+ new_right, |
+ node->mask32())); |
} |
void AwaitTransformer::VisitComparisonNode(ComparisonNode* node) { |
AstNode* new_left = Transform(node->left()); |
AstNode* new_right = Transform(node->right()); |
- LocalVariable* result = AddToPreambleNewTempVar( |
- new(Z) ComparisonNode(node->token_pos(), |
- node->kind(), |
- new_left, |
- new_right), ST(node->token_pos())); |
- result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result); |
+ result_ = MakeName(new(Z) ComparisonNode(node->token_pos(), |
+ node->kind(), |
+ new_left, |
+ new_right)); |
} |
void AwaitTransformer::VisitUnaryOpNode(UnaryOpNode* node) { |
AstNode* new_operand = Transform(node->operand()); |
- LocalVariable* result = AddToPreambleNewTempVar( |
- new(Z) UnaryOpNode(node->token_pos(), node->kind(), new_operand), |
- ST(node->token_pos())); |
- result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result); |
+ result_ = MakeName(new(Z) UnaryOpNode(node->token_pos(), |
+ node->kind(), |
+ new_operand)); |
} |
@@ -331,12 +330,12 @@ void AwaitTransformer::VisitUnaryOpNode(UnaryOpNode* node) { |
// |
void AwaitTransformer::VisitConditionalExprNode(ConditionalExprNode* node) { |
AstNode* new_condition = Transform(node->condition()); |
- SequenceNode* new_true = new (Z) SequenceNode( |
+ SequenceNode* new_true = new(Z) SequenceNode( |
ST(node->true_expr()->token_pos()), ChainNewScope(preamble_->scope())); |
SequenceNode* saved_preamble = preamble_; |
preamble_ = new_true; |
AstNode* new_true_result = Transform(node->true_expr()); |
- SequenceNode* new_false = new (Z) SequenceNode( |
+ SequenceNode* new_false = new(Z) SequenceNode( |
ST(node->false_expr()->token_pos()), ChainNewScope(preamble_->scope())); |
preamble_ = new_false; |
AstNode* new_false_result = Transform(node->false_expr()); |
@@ -346,12 +345,10 @@ void AwaitTransformer::VisitConditionalExprNode(ConditionalExprNode* node) { |
new_true, |
new_false); |
preamble_->Add(new_if); |
- LocalVariable* result = AddToPreambleNewTempVar( |
- new(Z) ConditionalExprNode(ST(node->token_pos()), |
- new_condition, |
- new_true_result, |
- new_false_result), ST(node->token_pos())); |
- result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result); |
+ result_ = MakeName(new(Z) ConditionalExprNode(ST(node->token_pos()), |
+ new_condition, |
+ new_true_result, |
+ new_false_result)); |
} |
@@ -376,10 +373,8 @@ void AwaitTransformer::VisitArrayNode(ArrayNode* node) { |
void AwaitTransformer::VisitStringInterpolateNode(StringInterpolateNode* node) { |
ArrayNode* new_value = Transform(node->value())->AsArrayNode(); |
- LocalVariable* result = AddToPreambleNewTempVar( |
- new(Z) StringInterpolateNode(node->token_pos(), |
- new_value), ST(node->token_pos())); |
- result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result); |
+ result_ = MakeName(new(Z) StringInterpolateNode(node->token_pos(), |
+ new_value)); |
} |
@@ -388,12 +383,10 @@ void AwaitTransformer::VisitClosureNode(ClosureNode* node) { |
if (new_receiver != NULL) { |
new_receiver = Transform(new_receiver); |
} |
- LocalVariable* result = AddToPreambleNewTempVar( |
- new(Z) ClosureNode(node->token_pos(), |
- node->function(), |
- new_receiver, |
- node->scope()), ST(node->token_pos())); |
- result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result); |
+ result_ = MakeName(new(Z) ClosureNode(node->token_pos(), |
+ node->function(), |
+ new_receiver, |
+ node->scope())); |
} |
@@ -401,47 +394,39 @@ void AwaitTransformer::VisitInstanceCallNode(InstanceCallNode* node) { |
AstNode* new_receiver = Transform(node->receiver()); |
ArgumentListNode* new_args = |
Transform(node->arguments())->AsArgumentListNode(); |
- LocalVariable* result = AddToPreambleNewTempVar( |
- new(Z) InstanceCallNode(node->token_pos(), |
- new_receiver, |
- node->function_name(), |
- new_args, |
- node->is_conditional()), ST(node->token_pos())); |
- result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result); |
+ result_ = MakeName(new(Z) InstanceCallNode(node->token_pos(), |
+ new_receiver, |
+ node->function_name(), |
+ new_args, |
+ node->is_conditional())); |
} |
void AwaitTransformer::VisitStaticCallNode(StaticCallNode* node) { |
ArgumentListNode* new_args = |
Transform(node->arguments())->AsArgumentListNode(); |
- LocalVariable* result = AddToPreambleNewTempVar( |
- new(Z) StaticCallNode(node->token_pos(), |
- node->function(), |
- new_args), ST(node->token_pos())); |
- result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result); |
+ result_ = MakeName(new(Z) StaticCallNode(node->token_pos(), |
+ node->function(), |
+ new_args)); |
} |
void AwaitTransformer::VisitConstructorCallNode(ConstructorCallNode* node) { |
ArgumentListNode* new_args = |
Transform(node->arguments())->AsArgumentListNode(); |
- LocalVariable* result = AddToPreambleNewTempVar( |
- new(Z) ConstructorCallNode(node->token_pos(), |
- node->type_arguments(), |
- node->constructor(), |
- new_args), ST(node->token_pos())); |
- result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result); |
+ result_ = MakeName(new(Z) ConstructorCallNode(node->token_pos(), |
+ node->type_arguments(), |
+ node->constructor(), |
+ new_args)); |
} |
void AwaitTransformer::VisitInstanceGetterNode(InstanceGetterNode* node) { |
AstNode* new_receiver = Transform(node->receiver()); |
- LocalVariable* result = AddToPreambleNewTempVar( |
- new(Z) InstanceGetterNode(node->token_pos(), |
- new_receiver, |
- node->field_name(), |
- node->is_conditional()), ST(node->token_pos())); |
- result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result); |
+ result_ = MakeName(new(Z) InstanceGetterNode(node->token_pos(), |
+ new_receiver, |
+ node->field_name(), |
+ node->is_conditional())); |
} |
@@ -451,13 +436,11 @@ void AwaitTransformer::VisitInstanceSetterNode(InstanceSetterNode* node) { |
new_receiver = Transform(new_receiver); |
} |
AstNode* new_value = Transform(node->value()); |
- LocalVariable* result = AddToPreambleNewTempVar( |
- new(Z) InstanceSetterNode(node->token_pos(), |
- new_receiver, |
- node->field_name(), |
- new_value, |
- node->is_conditional()), ST(node->token_pos())); |
- result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result); |
+ result_ = MakeName(new(Z) InstanceSetterNode(node->token_pos(), |
+ new_receiver, |
+ node->field_name(), |
+ new_value, |
+ node->is_conditional())); |
} |
@@ -472,9 +455,7 @@ void AwaitTransformer::VisitStaticGetterNode(StaticGetterNode* node) { |
node->cls(), |
node->field_name()); |
new_getter->set_owner(node->owner()); |
- LocalVariable* result = |
- AddToPreambleNewTempVar(new_getter, ST(node->token_pos())); |
- result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result); |
+ result_ = MakeName(new_getter); |
} |
@@ -497,46 +478,43 @@ void AwaitTransformer::VisitStaticSetterNode(StaticSetterNode* node) { |
node->function(), |
new_value); |
- LocalVariable* result = |
- AddToPreambleNewTempVar(new_setter, ST(node->token_pos())); |
- result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result); |
+ result_ = MakeName(new_setter); |
} |
void AwaitTransformer::VisitLoadLocalNode(LoadLocalNode* node) { |
- result_ = node; |
+ result_ = MakeName(node); |
} |
void AwaitTransformer::VisitStoreLocalNode(StoreLocalNode* node) { |
AstNode* new_value = Transform(node->value()); |
- result_ = new(Z) StoreLocalNode(node->token_pos(), &node->local(), new_value); |
+ result_ = MakeName(new(Z) StoreLocalNode(node->token_pos(), |
+ &node->local(), |
+ new_value)); |
} |
void AwaitTransformer::VisitLoadStaticFieldNode(LoadStaticFieldNode* node) { |
- result_ = node; |
+ result_ = MakeName(node); |
} |
void AwaitTransformer::VisitStoreStaticFieldNode(StoreStaticFieldNode* node) { |
AstNode* new_value = Transform(node->value()); |
- result_ = new(Z) StoreStaticFieldNode( |
- node->token_pos(), |
+ result_ = MakeName(new(Z) StoreStaticFieldNode(node->token_pos(), |
Field::ZoneHandle(Z, node->field().Original()), |
- new_value); |
+ new_value)); |
} |
void AwaitTransformer::VisitLoadIndexedNode(LoadIndexedNode* node) { |
AstNode* new_array = Transform(node->array()); |
AstNode* new_index = Transform(node->index_expr()); |
- LocalVariable* result = AddToPreambleNewTempVar( |
- new(Z) LoadIndexedNode(node->token_pos(), |
- new_array, |
- new_index, |
- node->super_class()), ST(node->token_pos())); |
- result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result); |
+ result_ = MakeName(new(Z) LoadIndexedNode(node->token_pos(), |
+ new_array, |
+ new_index, |
+ node->super_class())); |
} |
@@ -544,24 +522,20 @@ void AwaitTransformer::VisitStoreIndexedNode(StoreIndexedNode* node) { |
AstNode* new_array = Transform(node->array()); |
AstNode* new_index = Transform(node->index_expr()); |
AstNode* new_value = Transform(node->value()); |
- LocalVariable* result = AddToPreambleNewTempVar( |
- new(Z) StoreIndexedNode(node->token_pos(), |
- new_array, |
- new_index, |
- new_value, |
- node->super_class()), ST(node->token_pos())); |
- result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result); |
+ result_ = MakeName(new(Z) StoreIndexedNode(node->token_pos(), |
+ new_array, |
+ new_index, |
+ new_value, |
+ node->super_class())); |
} |
void AwaitTransformer::VisitAssignableNode(AssignableNode* node) { |
AstNode* new_expr = Transform(node->expr()); |
- LocalVariable* result = AddToPreambleNewTempVar( |
- new(Z) AssignableNode(node->token_pos(), |
- new_expr, |
- node->type(), |
- node->dst_name()), ST(node->token_pos())); |
- result_ = new(Z) LoadLocalNode(ST(node->token_pos()), result); |
+ result_ = MakeName(new(Z) AssignableNode(node->token_pos(), |
+ new_expr, |
+ node->type(), |
+ node->dst_name())); |
} |
@@ -598,9 +572,9 @@ void AwaitTransformer::VisitLetNode(LetNode* node) { |
void AwaitTransformer::VisitThrowNode(ThrowNode* node) { |
AstNode* new_exception = Transform(node->exception()); |
- result_ = new(Z) ThrowNode(node->token_pos(), |
- new_exception, |
- node->stacktrace()); |
+ result_ = MakeName(new(Z) ThrowNode(node->token_pos(), |
+ new_exception, |
+ node->stacktrace())); |
} |
} // namespace dart |