OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "vm/ast_transformer.h" | 5 #include "vm/ast_transformer.h" |
6 | 6 |
7 #include "vm/object_store.h" | 7 #include "vm/object_store.h" |
8 #include "vm/parser.h" | 8 #include "vm/parser.h" |
9 #include "vm/thread.h" | 9 #include "vm/thread.h" |
10 | 10 |
11 namespace dart { | 11 namespace dart { |
12 | 12 |
| 13 // Quick access to the current thread. |
| 14 #define T (thread()) |
| 15 |
13 // Quick access to the current zone. | 16 // Quick access to the current zone. |
14 #define Z (thread()->zone()) | 17 #define Z (thread()->zone()) |
15 | 18 |
16 // Quick synthetic token position. | 19 // Quick synthetic token position. |
17 #define ST(token_pos) ((token_pos).ToSynthetic()) | 20 #define ST(token_pos) ((token_pos).ToSynthetic()) |
18 | 21 |
19 // Nodes that are unreachable from already parsed expressions. | 22 // Nodes that are unreachable from already parsed expressions. |
20 #define FOR_EACH_UNREACHABLE_NODE(V) \ | 23 #define FOR_EACH_UNREACHABLE_NODE(V) \ |
21 V(AwaitMarker) \ | 24 V(AwaitMarker) \ |
22 V(Case) \ | 25 V(Case) \ |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
59 | 62 |
60 | 63 |
61 AstNode* AwaitTransformer::Transform(AstNode* expr) { | 64 AstNode* AwaitTransformer::Transform(AstNode* expr) { |
62 expr->Visit(this); | 65 expr->Visit(this); |
63 return result_; | 66 return result_; |
64 } | 67 } |
65 | 68 |
66 | 69 |
67 LocalVariable* AwaitTransformer::EnsureCurrentTempVar() { | 70 LocalVariable* AwaitTransformer::EnsureCurrentTempVar() { |
68 String& symbol = | 71 String& symbol = |
69 String::ZoneHandle(Z, Symbols::NewFormatted("%d", temp_cnt_)); | 72 String::ZoneHandle(Z, Symbols::NewFormatted(T, "%d", temp_cnt_)); |
70 symbol = Symbols::FromConcat(Symbols::AwaitTempVarPrefix(), symbol); | 73 symbol = Symbols::FromConcat(T, Symbols::AwaitTempVarPrefix(), symbol); |
71 ASSERT(!symbol.IsNull()); | 74 ASSERT(!symbol.IsNull()); |
72 // Look up the variable in the scope used for async temp variables. | 75 // Look up the variable in the scope used for async temp variables. |
73 LocalVariable* await_tmp = async_temp_scope_->LocalLookupVariable(symbol); | 76 LocalVariable* await_tmp = async_temp_scope_->LocalLookupVariable(symbol); |
74 if (await_tmp == NULL) { | 77 if (await_tmp == NULL) { |
75 // We need a new temp variable; add it to the function's top scope. | 78 // We need a new temp variable; add it to the function's top scope. |
76 await_tmp = new(Z) LocalVariable( | 79 await_tmp = new(Z) LocalVariable( |
77 TokenPosition::kNoSource, symbol, Object::dynamic_type()); | 80 TokenPosition::kNoSource, symbol, Object::dynamic_type()); |
78 async_temp_scope_->AddVariable(await_tmp); | 81 async_temp_scope_->AddVariable(await_tmp); |
79 // After adding it to the top scope, we can look it up from the preamble. | 82 // After adding it to the top scope, we can look it up from the preamble. |
80 // The following call includes an ASSERT check. | 83 // The following call includes an ASSERT check. |
(...skipping 490 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
571 | 574 |
572 | 575 |
573 void AwaitTransformer::VisitThrowNode(ThrowNode* node) { | 576 void AwaitTransformer::VisitThrowNode(ThrowNode* node) { |
574 AstNode* new_exception = Transform(node->exception()); | 577 AstNode* new_exception = Transform(node->exception()); |
575 result_ = MakeName(new(Z) ThrowNode(node->token_pos(), | 578 result_ = MakeName(new(Z) ThrowNode(node->token_pos(), |
576 new_exception, | 579 new_exception, |
577 node->stacktrace())); | 580 node->stacktrace())); |
578 } | 581 } |
579 | 582 |
580 } // namespace dart | 583 } // namespace dart |
OLD | NEW |