Index: runtime/vm/parser.cc |
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc |
index 7510ad1b1a1327f85e01ceee076db4326de23980..08d6bb74fa7ada3496a89d8d39d1647dce40a5da 100644 |
--- a/runtime/vm/parser.cc |
+++ b/runtime/vm/parser.cc |
@@ -6742,23 +6742,13 @@ void Parser::AddContinuationVariables() { |
void Parser::AddAsyncClosureVariables() { |
// Add to current block's scope: |
// var :async_op; |
- // var :async_then_callback; |
- // var :async_catch_error_callback; |
// var :async_completer; |
const Type& dynamic_type = Type::ZoneHandle(Z, Type::DynamicType()); |
LocalVariable* async_op_var = new(Z) LocalVariable( |
Scanner::kNoSourcePos, Symbols::AsyncOperation(), dynamic_type); |
current_block_->scope->AddVariable(async_op_var); |
- LocalVariable* async_then_callback_var = new(Z) LocalVariable( |
- Scanner::kNoSourcePos, Symbols::AsyncThenCallback(), dynamic_type); |
- current_block_->scope->AddVariable(async_then_callback_var); |
- current_block_->scope->CaptureVariable(Symbols::AsyncThenCallback()); |
- async_then_callback_var->set_is_captured(); |
- LocalVariable* async_catch_error_callback_var = new(Z) LocalVariable( |
- Scanner::kNoSourcePos, Symbols::AsyncCatchErrorCallback(), dynamic_type); |
- current_block_->scope->AddVariable(async_catch_error_callback_var); |
- current_block_->scope->CaptureVariable(Symbols::AsyncCatchErrorCallback()); |
- async_catch_error_callback_var->set_is_captured(); |
+ current_block_->scope->CaptureVariable(Symbols::AsyncOperation()); |
+ async_op_var->set_is_captured(); |
LocalVariable* async_completer = new(Z) LocalVariable( |
Scanner::kNoSourcePos, Symbols::AsyncCompleter(), dynamic_type); |
current_block_->scope->AddVariable(async_completer); |
@@ -6774,10 +6764,8 @@ void Parser::AddAsyncGeneratorVariables() { |
// store the StreamController object to which the yielded expressions |
// are added. |
// var :async_op; |
- // var :async_then_callback; |
- // var :async_catch_error_callback; |
- // These variables are used to store the async generator closure containing |
- // the body of the async* function. They are used by the await operator. |
+ // This variable is used to store the async generator closure containing |
+ // the body of the async* function. It is used by the await operator. |
const Type& dynamic_type = Type::ZoneHandle(Z, Type::DynamicType()); |
LocalVariable* controller_var = new(Z) LocalVariable( |
Scanner::kNoSourcePos, Symbols::Controller(), dynamic_type); |
@@ -6788,16 +6776,8 @@ void Parser::AddAsyncGeneratorVariables() { |
LocalVariable* async_op_var = new(Z) LocalVariable( |
Scanner::kNoSourcePos, Symbols::AsyncOperation(), dynamic_type); |
current_block_->scope->AddVariable(async_op_var); |
- LocalVariable* async_then_callback_var = new(Z) LocalVariable( |
- Scanner::kNoSourcePos, Symbols::AsyncThenCallback(), dynamic_type); |
- current_block_->scope->AddVariable(async_then_callback_var); |
- current_block_->scope->CaptureVariable(Symbols::AsyncThenCallback()); |
- async_then_callback_var->set_is_captured(); |
- LocalVariable* async_catch_error_callback_var = new(Z) LocalVariable( |
- Scanner::kNoSourcePos, Symbols::AsyncCatchErrorCallback(), dynamic_type); |
- current_block_->scope->AddVariable(async_catch_error_callback_var); |
- current_block_->scope->CaptureVariable(Symbols::AsyncCatchErrorCallback()); |
- async_catch_error_callback_var->set_is_captured(); |
+ current_block_->scope->CaptureVariable(Symbols::AsyncOperation()); |
+ async_op_var->set_is_captured(); |
} |
@@ -6879,8 +6859,6 @@ RawFunction* Parser::OpenAsyncGeneratorFunction(intptr_t async_func_pos) { |
// ... source code of f ... |
// } |
// var :async_op = f_async_body; |
-// var :async_then_callback = _asyncThenWrapperHelper(:async_op); |
-// var :async_catch_error_callback = _asyncCatchErrorWrapperHelper(:async_op); |
// :controller = new _AsyncStarStreamController(:async_op); |
// return :controller.stream; |
// } |
@@ -6900,15 +6878,9 @@ SequenceNode* Parser::CloseAsyncGeneratorFunction(const Function& closure_func, |
closure_body->scope()->LookupVariable(Symbols::AwaitContextVar(), false); |
closure_body->scope()->LookupVariable(Symbols::Controller(), false); |
closure_body->scope()->LookupVariable(Symbols::AsyncOperation(), false); |
- closure_body->scope()->LookupVariable(Symbols::AsyncThenCallback(), false); |
- closure_body->scope()->LookupVariable( |
- Symbols::AsyncCatchErrorCallback(), false); |
- |
- const Library& async_lib = Library::Handle(Library::AsyncLibrary()); |
const Class& controller_class = Class::Handle(Z, |
- async_lib.LookupClassAllowPrivate( |
- Symbols::_AsyncStarStreamController())); |
+ Library::LookupCoreClass(Symbols::_AsyncStarStreamController())); |
ASSERT(!controller_class.IsNull()); |
const Function& controller_constructor = Function::ZoneHandle(Z, |
controller_class.LookupConstructorAllowPrivate( |
@@ -6932,56 +6904,8 @@ SequenceNode* Parser::CloseAsyncGeneratorFunction(const Function& closure_func, |
Scanner::kNoSourcePos, |
async_op_var, |
closure_obj); |
- |
current_block_->statements->Add(store_async_op); |
- // :async_then_callback = _asyncThenWrapperHelper(:async_op) |
- const Function& async_then_wrapper_helper = Function::ZoneHandle( |
- Z, async_lib.LookupFunctionAllowPrivate( |
- Symbols::AsyncThenWrapperHelper())); |
- ASSERT(!async_then_wrapper_helper.IsNull()); |
- ArgumentListNode* async_then_wrapper_helper_args = new (Z) ArgumentListNode( |
- Scanner::kNoSourcePos); |
- async_then_wrapper_helper_args->Add( |
- new (Z) LoadLocalNode(Scanner::kNoSourcePos, async_op_var)); |
- StaticCallNode* then_wrapper_call = new (Z) StaticCallNode( |
- Scanner::kNoSourcePos, |
- async_then_wrapper_helper, |
- async_then_wrapper_helper_args); |
- LocalVariable* async_then_callback_var = |
- current_block_->scope->LookupVariable( |
- Symbols::AsyncThenCallback(), false); |
- StoreLocalNode* store_async_then_callback = new (Z) StoreLocalNode( |
- Scanner::kNoSourcePos, |
- async_then_callback_var, |
- then_wrapper_call); |
- |
- current_block_->statements->Add(store_async_then_callback); |
- |
- // :async_catch_error_callback = _asyncErrorWrapperHelper(:async_op) |
- |
- const Function& async_error_wrapper_helper = Function::ZoneHandle( |
- Z, async_lib.LookupFunctionAllowPrivate( |
- Symbols::AsyncErrorWrapperHelper())); |
- ASSERT(!async_error_wrapper_helper.IsNull()); |
- ArgumentListNode* async_error_wrapper_helper_args = new (Z) ArgumentListNode( |
- Scanner::kNoSourcePos); |
- async_error_wrapper_helper_args->Add( |
- new (Z) LoadLocalNode(Scanner::kNoSourcePos, async_op_var)); |
- StaticCallNode* error_wrapper_call = new (Z) StaticCallNode( |
- Scanner::kNoSourcePos, |
- async_error_wrapper_helper, |
- async_error_wrapper_helper_args); |
- LocalVariable* async_catch_error_callback_var = |
- current_block_->scope->LookupVariable( |
- Symbols::AsyncCatchErrorCallback(), false); |
- StoreLocalNode* store_async_catch_error_callback = new (Z) StoreLocalNode( |
- Scanner::kNoSourcePos, |
- async_catch_error_callback_var, |
- error_wrapper_call); |
- |
- current_block_->statements->Add(store_async_catch_error_callback); |
- |
// :controller = new _AsyncStarStreamController(body_closure); |
ArgumentListNode* arguments = new(Z) ArgumentListNode(Scanner::kNoSourcePos); |
arguments->Add(new (Z) LoadLocalNode(Scanner::kNoSourcePos, async_op_var)); |
@@ -7138,54 +7062,6 @@ SequenceNode* Parser::CloseAsyncFunction(const Function& closure, |
cn); |
current_block_->statements->Add(store_async_op); |
- const Library& async_lib = Library::Handle(Library::AsyncLibrary()); |
- // :async_then_callback = _asyncThenWrapperHelper(:async_op) |
- const Function& async_then_wrapper_helper = Function::ZoneHandle( |
- Z, async_lib.LookupFunctionAllowPrivate( |
- Symbols::AsyncThenWrapperHelper())); |
- ASSERT(!async_then_wrapper_helper.IsNull()); |
- ArgumentListNode* async_then_wrapper_helper_args = new (Z) ArgumentListNode( |
- Scanner::kNoSourcePos); |
- async_then_wrapper_helper_args->Add( |
- new (Z) LoadLocalNode(Scanner::kNoSourcePos, async_op_var)); |
- StaticCallNode* then_wrapper_call = new (Z) StaticCallNode( |
- Scanner::kNoSourcePos, |
- async_then_wrapper_helper, |
- async_then_wrapper_helper_args); |
- LocalVariable* async_then_callback_var = |
- current_block_->scope->LookupVariable( |
- Symbols::AsyncThenCallback(), false); |
- StoreLocalNode* store_async_then_callback = new (Z) StoreLocalNode( |
- Scanner::kNoSourcePos, |
- async_then_callback_var, |
- then_wrapper_call); |
- |
- current_block_->statements->Add(store_async_then_callback); |
- |
- // :async_catch_error_callback = _asyncErrorWrapperHelper(:async_op) |
- |
- const Function& async_error_wrapper_helper = Function::ZoneHandle( |
- Z, async_lib.LookupFunctionAllowPrivate( |
- Symbols::AsyncErrorWrapperHelper())); |
- ASSERT(!async_error_wrapper_helper.IsNull()); |
- ArgumentListNode* async_error_wrapper_helper_args = new (Z) ArgumentListNode( |
- Scanner::kNoSourcePos); |
- async_error_wrapper_helper_args->Add( |
- new (Z) LoadLocalNode(Scanner::kNoSourcePos, async_op_var)); |
- StaticCallNode* error_wrapper_call = new (Z) StaticCallNode( |
- Scanner::kNoSourcePos, |
- async_error_wrapper_helper, |
- async_error_wrapper_helper_args); |
- LocalVariable* async_catch_error_callback_var = |
- current_block_->scope->LookupVariable( |
- Symbols::AsyncCatchErrorCallback(), false); |
- StoreLocalNode* store_async_catch_error_callback = new (Z) StoreLocalNode( |
- Scanner::kNoSourcePos, |
- async_catch_error_callback_var, |
- error_wrapper_call); |
- |
- current_block_->statements->Add(store_async_catch_error_callback); |
- |
// Add to AST: |
// new Future.microtask(:async_op); |
ArgumentListNode* arguments = new (Z) ArgumentListNode(Scanner::kNoSourcePos); |