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 |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
139 LocalVariable* async_catch_error_callback = GetVariableInScope( | 139 LocalVariable* async_catch_error_callback = GetVariableInScope( |
140 preamble_->scope(), Symbols::AsyncCatchErrorCallback()); | 140 preamble_->scope(), Symbols::AsyncCatchErrorCallback()); |
141 LocalVariable* result_param = GetVariableInScope( | 141 LocalVariable* result_param = GetVariableInScope( |
142 preamble_->scope(), Symbols::AsyncOperationParam()); | 142 preamble_->scope(), Symbols::AsyncOperationParam()); |
143 LocalVariable* error_param = GetVariableInScope( | 143 LocalVariable* error_param = GetVariableInScope( |
144 preamble_->scope(), Symbols::AsyncOperationErrorParam()); | 144 preamble_->scope(), Symbols::AsyncOperationErrorParam()); |
145 LocalVariable* stack_trace_param = GetVariableInScope( | 145 LocalVariable* stack_trace_param = GetVariableInScope( |
146 preamble_->scope(), Symbols::AsyncOperationStackTraceParam()); | 146 preamble_->scope(), Symbols::AsyncOperationStackTraceParam()); |
147 | 147 |
148 AstNode* transformed_expr = Transform(node->expr()); | 148 AstNode* transformed_expr = Transform(node->expr()); |
149 LocalVariable* await_temp = AddNewTempVarToPreamble(transformed_expr, | 149 LocalVariable* await_temp = |
150 ST(node->token_pos())); | 150 AddNewTempVarToPreamble(transformed_expr, token_pos); |
hausner
2016/04/08 16:43:36
Nit: indentation should be 4 spaces.
| |
151 | 151 |
152 AwaitMarkerNode* await_marker = | 152 AwaitMarkerNode* await_marker = |
153 new(Z) AwaitMarkerNode(async_temp_scope_, node->scope(), token_pos); | 153 new(Z) AwaitMarkerNode(async_temp_scope_, node->scope(), token_pos); |
154 preamble_->Add(await_marker); | 154 preamble_->Add(await_marker); |
155 | 155 |
156 // :result_param = _awaitHelper( | 156 // :result_param = _awaitHelper( |
157 // :await_temp, :async_then_callback, :async_catch_error_callback) | 157 // :await_temp, :async_then_callback, :async_catch_error_callback) |
158 const Library& async_lib = Library::Handle(Library::AsyncLibrary()); | 158 const Library& async_lib = Library::Handle(Library::AsyncLibrary()); |
159 const Function& async_await_helper = Function::ZoneHandle( | 159 const Function& async_await_helper = Function::ZoneHandle( |
160 Z, async_lib.LookupFunctionAllowPrivate(Symbols::AsyncAwaitHelper())); | 160 Z, async_lib.LookupFunctionAllowPrivate(Symbols::AsyncAwaitHelper())); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
213 error_ne_null_branch->Add(new(Z) ThrowNode( | 213 error_ne_null_branch->Add(new(Z) ThrowNode( |
214 token_pos, | 214 token_pos, |
215 load_error_param, | 215 load_error_param, |
216 load_stack_trace_param)); | 216 load_stack_trace_param)); |
217 preamble_->Add(new(Z) IfNode( | 217 preamble_->Add(new(Z) IfNode( |
218 token_pos, | 218 token_pos, |
219 new(Z) ComparisonNode( | 219 new(Z) ComparisonNode( |
220 token_pos, | 220 token_pos, |
221 Token::kNE, | 221 Token::kNE, |
222 load_error_param, | 222 load_error_param, |
223 new(Z) LiteralNode(token_pos, | 223 new(Z) LiteralNode(token_pos, Object::null_instance())), |
224 Object::null_instance())), | |
225 error_ne_null_branch, | 224 error_ne_null_branch, |
226 NULL)); | 225 NULL)); |
227 | 226 |
228 LocalVariable* result = AddNewTempVarToPreamble(new(Z) LoadLocalNode( | 227 result_ = MakeName(result_param); |
hausner
2016/04/08 16:43:36
How does this work? result_param is a LocalVariabl
| |
229 token_pos, result_param), ST(node->token_pos())); | |
230 result_ = new(Z) LoadLocalNode(token_pos, result); | |
231 } | 228 } |
232 | 229 |
233 | 230 |
234 // Transforms boolean expressions into a sequence of evaluatons that only lazily | 231 // Transforms boolean expressions into a sequence of evaluatons that only lazily |
235 // evaluate subexpressions. | 232 // evaluate subexpressions. |
236 // | 233 // |
237 // Example: | 234 // Example: |
238 // | 235 // |
239 // (a || b) only evaluates b if a is false | 236 // (a || b) only evaluates b if a is false |
240 // | 237 // |
(...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
571 | 568 |
572 | 569 |
573 void AwaitTransformer::VisitThrowNode(ThrowNode* node) { | 570 void AwaitTransformer::VisitThrowNode(ThrowNode* node) { |
574 AstNode* new_exception = Transform(node->exception()); | 571 AstNode* new_exception = Transform(node->exception()); |
575 result_ = MakeName(new(Z) ThrowNode(node->token_pos(), | 572 result_ = MakeName(new(Z) ThrowNode(node->token_pos(), |
576 new_exception, | 573 new_exception, |
577 node->stacktrace())); | 574 node->stacktrace())); |
578 } | 575 } |
579 | 576 |
580 } // namespace dart | 577 } // namespace dart |
OLD | NEW |