| 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(
|
|
|