Index: runtime/vm/ast_transformer.cc |
diff --git a/runtime/vm/ast_transformer.cc b/runtime/vm/ast_transformer.cc |
index 7ce398c8652eee9fe7a4f187342df9617b46c67a..81304f606bd28b25483d7f9852a8ae39e6d7e598 100644 |
--- a/runtime/vm/ast_transformer.cc |
+++ b/runtime/vm/ast_transformer.cc |
@@ -60,13 +60,11 @@ AwaitTransformer::AwaitTransformer(SequenceNode* preamble, |
ASSERT(async_temp_scope_ != NULL); |
} |
- |
AstNode* AwaitTransformer::Transform(AstNode* expr) { |
expr->Visit(this); |
return result_; |
} |
- |
LocalVariable* AwaitTransformer::EnsureCurrentTempVar() { |
String& symbol = |
String::ZoneHandle(Z, Symbols::NewFormatted(T, "%d", temp_cnt_)); |
@@ -87,7 +85,6 @@ LocalVariable* AwaitTransformer::EnsureCurrentTempVar() { |
return await_tmp; |
} |
- |
LocalVariable* AwaitTransformer::GetVariableInScope(LocalScope* scope, |
const String& symbol) { |
LocalVariable* var = scope->LookupVariable(symbol, false); |
@@ -95,7 +92,6 @@ LocalVariable* AwaitTransformer::GetVariableInScope(LocalScope* scope, |
return var; |
} |
- |
LocalVariable* AwaitTransformer::AddNewTempVarToPreamble( |
AstNode* node, |
TokenPosition token_pos) { |
@@ -106,18 +102,15 @@ LocalVariable* AwaitTransformer::AddNewTempVarToPreamble( |
return tmp_var; |
} |
- |
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; |
} |
- |
void AwaitTransformer::VisitTypeNode(TypeNode* node) { |
if (node->is_deferred_reference()) { |
// Deferred references must use a temporary even after loading |
@@ -129,7 +122,6 @@ void AwaitTransformer::VisitTypeNode(TypeNode* node) { |
} |
} |
- |
void AwaitTransformer::VisitAwaitNode(AwaitNode* node) { |
// Await transformation: |
// |
@@ -224,15 +216,15 @@ void AwaitTransformer::VisitAwaitNode(AwaitNode* node) { |
error_ne_null_branch->Add( |
new (Z) ThrowNode(token_pos, load_error_param, load_stack_trace_param)); |
preamble_->Add(new (Z) IfNode( |
- token_pos, new (Z) ComparisonNode( |
- token_pos, Token::kNE, load_error_param, |
- new (Z) LiteralNode(token_pos, Object::null_instance())), |
+ token_pos, |
+ new (Z) ComparisonNode( |
+ token_pos, Token::kNE, load_error_param, |
+ new (Z) LiteralNode(token_pos, Object::null_instance())), |
error_ne_null_branch, NULL)); |
result_ = MakeName(new (Z) LoadLocalNode(token_pos, result_param)); |
} |
- |
// Transforms boolean expressions into a sequence of evaluations that only |
// lazily evaluate subexpressions. |
// |
@@ -271,13 +263,11 @@ AstNode* AwaitTransformer::LazyTransform(const Token::Kind logical_op, |
return result; |
} |
- |
LocalScope* AwaitTransformer::ChainNewScope(LocalScope* parent) { |
return new (Z) |
LocalScope(parent, parent->function_level(), parent->loop_level()); |
} |
- |
void AwaitTransformer::VisitBinaryOpNode(BinaryOpNode* node) { |
AstNode* new_left = Transform(node->left()); |
AstNode* new_right = NULL; |
@@ -291,7 +281,6 @@ void AwaitTransformer::VisitBinaryOpNode(BinaryOpNode* node) { |
new_left, new_right)); |
} |
- |
void AwaitTransformer::VisitComparisonNode(ComparisonNode* node) { |
AstNode* new_left = Transform(node->left()); |
AstNode* new_right = Transform(node->right()); |
@@ -299,14 +288,12 @@ void AwaitTransformer::VisitComparisonNode(ComparisonNode* node) { |
new_left, new_right)); |
} |
- |
void AwaitTransformer::VisitUnaryOpNode(UnaryOpNode* node) { |
AstNode* new_operand = Transform(node->operand()); |
result_ = MakeName( |
new (Z) UnaryOpNode(node->token_pos(), node->kind(), new_operand)); |
} |
- |
// ::= (<condition>) ? <true-branch> : <false-branch> |
// |
void AwaitTransformer::VisitConditionalExprNode(ConditionalExprNode* node) { |
@@ -328,7 +315,6 @@ void AwaitTransformer::VisitConditionalExprNode(ConditionalExprNode* node) { |
ST(node->token_pos()), new_condition, new_true_result, new_false_result)); |
} |
- |
void AwaitTransformer::VisitArgumentListNode(ArgumentListNode* node) { |
ArgumentListNode* new_args = new (Z) ArgumentListNode(node->token_pos()); |
for (intptr_t i = 0; i < node->length(); i++) { |
@@ -338,7 +324,6 @@ void AwaitTransformer::VisitArgumentListNode(ArgumentListNode* node) { |
result_ = new_args; |
} |
- |
void AwaitTransformer::VisitArrayNode(ArrayNode* node) { |
GrowableArray<AstNode*> new_elements; |
for (intptr_t i = 0; i < node->length(); i++) { |
@@ -347,14 +332,12 @@ void AwaitTransformer::VisitArrayNode(ArrayNode* node) { |
result_ = new (Z) ArrayNode(node->token_pos(), node->type(), new_elements); |
} |
- |
void AwaitTransformer::VisitStringInterpolateNode(StringInterpolateNode* node) { |
ArrayNode* new_value = Transform(node->value())->AsArrayNode(); |
result_ = |
MakeName(new (Z) StringInterpolateNode(node->token_pos(), new_value)); |
} |
- |
void AwaitTransformer::VisitClosureNode(ClosureNode* node) { |
AstNode* new_receiver = node->receiver(); |
if (new_receiver != NULL) { |
@@ -364,7 +347,6 @@ void AwaitTransformer::VisitClosureNode(ClosureNode* node) { |
new_receiver, node->scope())); |
} |
- |
void AwaitTransformer::VisitInstanceCallNode(InstanceCallNode* node) { |
AstNode* new_receiver = Transform(node->receiver()); |
ArgumentListNode* new_args = |
@@ -374,7 +356,6 @@ void AwaitTransformer::VisitInstanceCallNode(InstanceCallNode* node) { |
node->is_conditional())); |
} |
- |
void AwaitTransformer::VisitStaticCallNode(StaticCallNode* node) { |
ArgumentListNode* new_args = |
Transform(node->arguments())->AsArgumentListNode(); |
@@ -382,7 +363,6 @@ void AwaitTransformer::VisitStaticCallNode(StaticCallNode* node) { |
new (Z) StaticCallNode(node->token_pos(), node->function(), new_args)); |
} |
- |
void AwaitTransformer::VisitConstructorCallNode(ConstructorCallNode* node) { |
ArgumentListNode* new_args = |
Transform(node->arguments())->AsArgumentListNode(); |
@@ -391,7 +371,6 @@ void AwaitTransformer::VisitConstructorCallNode(ConstructorCallNode* node) { |
node->constructor(), new_args)); |
} |
- |
void AwaitTransformer::VisitInstanceGetterNode(InstanceGetterNode* node) { |
AstNode* new_receiver = Transform(node->receiver()); |
result_ = MakeName(new (Z) InstanceGetterNode(node->token_pos(), new_receiver, |
@@ -399,7 +378,6 @@ void AwaitTransformer::VisitInstanceGetterNode(InstanceGetterNode* node) { |
node->is_conditional())); |
} |
- |
void AwaitTransformer::VisitInstanceSetterNode(InstanceSetterNode* node) { |
AstNode* new_receiver = node->receiver(); |
if (new_receiver != NULL) { |
@@ -411,7 +389,6 @@ void AwaitTransformer::VisitInstanceSetterNode(InstanceSetterNode* node) { |
node->is_conditional())); |
} |
- |
void AwaitTransformer::VisitStaticGetterNode(StaticGetterNode* node) { |
AstNode* new_receiver = node->receiver(); |
if (new_receiver != NULL) { |
@@ -423,7 +400,6 @@ void AwaitTransformer::VisitStaticGetterNode(StaticGetterNode* node) { |
result_ = MakeName(new_getter); |
} |
- |
void AwaitTransformer::VisitStaticSetterNode(StaticSetterNode* node) { |
AstNode* new_receiver = node->receiver(); |
if (new_receiver != NULL) { |
@@ -441,24 +417,20 @@ void AwaitTransformer::VisitStaticSetterNode(StaticSetterNode* node) { |
result_ = MakeName(new_setter); |
} |
- |
void AwaitTransformer::VisitLoadLocalNode(LoadLocalNode* node) { |
result_ = MakeName(node); |
} |
- |
void AwaitTransformer::VisitStoreLocalNode(StoreLocalNode* node) { |
AstNode* new_value = Transform(node->value()); |
result_ = MakeName( |
new (Z) StoreLocalNode(node->token_pos(), &node->local(), new_value)); |
} |
- |
void AwaitTransformer::VisitLoadStaticFieldNode(LoadStaticFieldNode* node) { |
result_ = MakeName(node); |
} |
- |
void AwaitTransformer::VisitStoreStaticFieldNode(StoreStaticFieldNode* node) { |
AstNode* new_value = Transform(node->value()); |
result_ = MakeName(new (Z) StoreStaticFieldNode( |
@@ -466,7 +438,6 @@ void AwaitTransformer::VisitStoreStaticFieldNode(StoreStaticFieldNode* node) { |
new_value)); |
} |
- |
void AwaitTransformer::VisitLoadIndexedNode(LoadIndexedNode* node) { |
AstNode* new_array = Transform(node->array()); |
AstNode* new_index = Transform(node->index_expr()); |
@@ -474,7 +445,6 @@ void AwaitTransformer::VisitLoadIndexedNode(LoadIndexedNode* node) { |
new_index, node->super_class())); |
} |
- |
void AwaitTransformer::VisitStoreIndexedNode(StoreIndexedNode* node) { |
AstNode* new_array = Transform(node->array()); |
AstNode* new_index = Transform(node->index_expr()); |
@@ -483,14 +453,12 @@ void AwaitTransformer::VisitStoreIndexedNode(StoreIndexedNode* node) { |
node->token_pos(), new_array, new_index, new_value, node->super_class())); |
} |
- |
void AwaitTransformer::VisitAssignableNode(AssignableNode* node) { |
AstNode* new_expr = Transform(node->expr()); |
result_ = MakeName(new (Z) AssignableNode(node->token_pos(), new_expr, |
node->type(), node->dst_name())); |
} |
- |
void AwaitTransformer::VisitLetNode(LetNode* node) { |
// Add all the initializer nodes to the preamble and the |
// temporary variables to the scope for async temporary variables. |
@@ -520,7 +488,6 @@ void AwaitTransformer::VisitLetNode(LetNode* node) { |
result_ = Transform(node->nodes()[last_node_index]); |
} |
- |
void AwaitTransformer::VisitThrowNode(ThrowNode* node) { |
AstNode* new_exception = Transform(node->exception()); |
result_ = MakeName( |