Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(13)

Side by Side Diff: runtime/vm/parser.cc

Issue 2646443005: Track async causal stack traces (Closed)
Patch Set: Observatory UI support Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, 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/parser.h" 5 #include "vm/parser.h"
6 #include "vm/flags.h" 6 #include "vm/flags.h"
7 7
8 #ifndef DART_PRECOMPILED_RUNTIME 8 #ifndef DART_PRECOMPILED_RUNTIME
9 9
10 #include "lib/invocation_mirror.h" 10 #include "lib/invocation_mirror.h"
(...skipping 3450 matching lines...) Expand 10 before | Expand all | Expand 10 after
3461 func.set_modifier(func_modifier); 3461 func.set_modifier(func_modifier);
3462 } 3462 }
3463 3463
3464 OpenBlock(); // Open a nested scope for the outermost function block. 3464 OpenBlock(); // Open a nested scope for the outermost function block.
3465 3465
3466 Function& generated_body_closure = Function::ZoneHandle(Z); 3466 Function& generated_body_closure = Function::ZoneHandle(Z);
3467 if (func.IsAsyncFunction()) { 3467 if (func.IsAsyncFunction()) {
3468 ASSERT(!func.is_generated_body()); 3468 ASSERT(!func.is_generated_body());
3469 // The code of an async function is synthesized. Disable debugging. 3469 // The code of an async function is synthesized. Disable debugging.
3470 func.set_is_debuggable(false); 3470 func.set_is_debuggable(false);
3471 // In order to produce sane asynchronous stacks we rely on this function
rmacnak 2017/01/26 18:05:58 To collect them efficiently.
Cutch 2017/01/31 23:45:31 Done (here and elsewhere).
3472 // not being inlined.
3473 func.set_is_inlinable(!FLAG_sane_async_stacks);
3471 generated_body_closure = OpenAsyncFunction(func.token_pos()); 3474 generated_body_closure = OpenAsyncFunction(func.token_pos());
3472 } else if (func.IsAsyncClosure()) { 3475 } else if (func.IsAsyncClosure()) {
3473 // The closure containing the body of an async function is debuggable. 3476 // The closure containing the body of an async function is debuggable.
3474 ASSERT(func.is_debuggable()); 3477 ASSERT(func.is_debuggable());
3478 // In order to produce sane asynchronous stacks we rely on this function
3479 // not being inlined.
3480 func.set_is_inlinable(!FLAG_sane_async_stacks);
3475 OpenAsyncClosure(); 3481 OpenAsyncClosure();
3476 } else if (func.IsSyncGenerator()) { 3482 } else if (func.IsSyncGenerator()) {
3477 // The code of a sync generator is synthesized. Disable debugging. 3483 // The code of a sync generator is synthesized. Disable debugging.
3478 func.set_is_debuggable(false); 3484 func.set_is_debuggable(false);
3479 generated_body_closure = OpenSyncGeneratorFunction(func.token_pos()); 3485 generated_body_closure = OpenSyncGeneratorFunction(func.token_pos());
3480 } else if (func.IsSyncGenClosure()) { 3486 } else if (func.IsSyncGenClosure()) {
3481 // The closure containing the body of a sync generator is debuggable. 3487 // The closure containing the body of a sync generator is debuggable.
3482 ASSERT(func.is_debuggable()); 3488 ASSERT(func.is_debuggable());
3483 async_temp_scope_ = current_block_->scope; 3489 async_temp_scope_ = current_block_->scope;
3484 } else if (func.IsAsyncGenerator()) { 3490 } else if (func.IsAsyncGenerator()) {
3485 func.set_is_debuggable(false); 3491 func.set_is_debuggable(false);
3492 // In order to produce sane asynchronous stacks we rely on this function
3493 // not being inlined.
3494 func.set_is_inlinable(!FLAG_sane_async_stacks);
3486 generated_body_closure = OpenAsyncGeneratorFunction(func.token_pos()); 3495 generated_body_closure = OpenAsyncGeneratorFunction(func.token_pos());
3487 } else if (func.IsAsyncGenClosure()) { 3496 } else if (func.IsAsyncGenClosure()) {
3488 // The closure containing the body of an async* function is debuggable. 3497 // The closure containing the body of an async* function is debuggable.
3489 ASSERT(func.is_debuggable()); 3498 ASSERT(func.is_debuggable());
3499 // In order to produce sane asynchronous stacks we rely on this function
3500 // not being inlined.
3501 func.set_is_inlinable(!FLAG_sane_async_stacks);
3490 OpenAsyncGeneratorClosure(); 3502 OpenAsyncGeneratorClosure();
3491 } 3503 }
3492 3504
3493 BoolScope allow_await(&this->await_is_keyword_, 3505 BoolScope allow_await(&this->await_is_keyword_,
3494 func.IsAsyncOrGenerator() || func.is_generated_body()); 3506 func.IsAsyncOrGenerator() || func.is_generated_body());
3495 TokenPosition end_token_pos = TokenPosition::kNoSource; 3507 TokenPosition end_token_pos = TokenPosition::kNoSource;
3496 if (CurrentToken() == Token::kLBRACE) { 3508 if (CurrentToken() == Token::kLBRACE) {
3497 ConsumeToken(); 3509 ConsumeToken();
3498 if (String::Handle(Z, func.name()).Equals(Symbols::EqualOperator())) { 3510 if (String::Handle(Z, func.name()).Equals(Symbols::EqualOperator())) {
3499 const Class& owner = Class::Handle(Z, func.Owner()); 3511 const Class& owner = Class::Handle(Z, func.Owner());
(...skipping 3354 matching lines...) Expand 10 before | Expand all | Expand 10 after
6854 current_block_->scope->AddVariable(await_ctx_var); 6866 current_block_->scope->AddVariable(await_ctx_var);
6855 } 6867 }
6856 6868
6857 6869
6858 void Parser::AddAsyncClosureVariables() { 6870 void Parser::AddAsyncClosureVariables() {
6859 // Add to current block's scope: 6871 // Add to current block's scope:
6860 // var :async_op; 6872 // var :async_op;
6861 // var :async_then_callback; 6873 // var :async_then_callback;
6862 // var :async_catch_error_callback; 6874 // var :async_catch_error_callback;
6863 // var :async_completer; 6875 // var :async_completer;
6876 // var :async_stack_trace;
6864 LocalVariable* async_op_var = 6877 LocalVariable* async_op_var =
6865 new (Z) LocalVariable(TokenPosition::kNoSource, TokenPosition::kNoSource, 6878 new (Z) LocalVariable(TokenPosition::kNoSource, TokenPosition::kNoSource,
6866 Symbols::AsyncOperation(), Object::dynamic_type()); 6879 Symbols::AsyncOperation(), Object::dynamic_type());
6867 current_block_->scope->AddVariable(async_op_var); 6880 current_block_->scope->AddVariable(async_op_var);
6868 LocalVariable* async_then_callback_var = new (Z) 6881 LocalVariable* async_then_callback_var = new (Z)
6869 LocalVariable(TokenPosition::kNoSource, TokenPosition::kNoSource, 6882 LocalVariable(TokenPosition::kNoSource, TokenPosition::kNoSource,
6870 Symbols::AsyncThenCallback(), Object::dynamic_type()); 6883 Symbols::AsyncThenCallback(), Object::dynamic_type());
6871 current_block_->scope->AddVariable(async_then_callback_var); 6884 current_block_->scope->AddVariable(async_then_callback_var);
6872 LocalVariable* async_catch_error_callback_var = new (Z) 6885 LocalVariable* async_catch_error_callback_var = new (Z)
6873 LocalVariable(TokenPosition::kNoSource, TokenPosition::kNoSource, 6886 LocalVariable(TokenPosition::kNoSource, TokenPosition::kNoSource,
6874 Symbols::AsyncCatchErrorCallback(), Object::dynamic_type()); 6887 Symbols::AsyncCatchErrorCallback(), Object::dynamic_type());
6875 current_block_->scope->AddVariable(async_catch_error_callback_var); 6888 current_block_->scope->AddVariable(async_catch_error_callback_var);
6876 LocalVariable* async_completer = 6889 LocalVariable* async_completer =
6877 new (Z) LocalVariable(TokenPosition::kNoSource, TokenPosition::kNoSource, 6890 new (Z) LocalVariable(TokenPosition::kNoSource, TokenPosition::kNoSource,
6878 Symbols::AsyncCompleter(), Object::dynamic_type()); 6891 Symbols::AsyncCompleter(), Object::dynamic_type());
6879 current_block_->scope->AddVariable(async_completer); 6892 current_block_->scope->AddVariable(async_completer);
6893 LocalVariable* async_stack_trace = new (Z)
6894 LocalVariable(TokenPosition::kNoSource, TokenPosition::kNoSource,
6895 Symbols::AsyncStackTraceVar(), Object::dynamic_type());
6896 current_block_->scope->AddVariable(async_stack_trace);
6880 } 6897 }
6881 6898
6882 6899
6883 void Parser::AddAsyncGeneratorVariables() { 6900 void Parser::AddAsyncGeneratorVariables() {
6884 // Add to current block's scope: 6901 // Add to current block's scope:
6885 // var :controller; 6902 // var :controller;
6886 // The :controller variable is used by the async generator closure to 6903 // The :controller variable is used by the async generator closure to
6887 // store the StreamController object to which the yielded expressions 6904 // store the StreamController object to which the yielded expressions
6888 // are added. 6905 // are added.
6889 // var :async_op; 6906 // var :async_op;
6890 // var :async_then_callback; 6907 // var :async_then_callback;
6891 // var :async_catch_error_callback; 6908 // var :async_catch_error_callback;
6909 // var :async_stack_trace;
6892 // These variables are used to store the async generator closure containing 6910 // These variables are used to store the async generator closure containing
6893 // the body of the async* function. They are used by the await operator. 6911 // the body of the async* function. They are used by the await operator.
6894 LocalVariable* controller_var = 6912 LocalVariable* controller_var =
6895 new (Z) LocalVariable(TokenPosition::kNoSource, TokenPosition::kNoSource, 6913 new (Z) LocalVariable(TokenPosition::kNoSource, TokenPosition::kNoSource,
6896 Symbols::Controller(), Object::dynamic_type()); 6914 Symbols::Controller(), Object::dynamic_type());
6897 current_block_->scope->AddVariable(controller_var); 6915 current_block_->scope->AddVariable(controller_var);
6898 LocalVariable* async_op_var = 6916 LocalVariable* async_op_var =
6899 new (Z) LocalVariable(TokenPosition::kNoSource, TokenPosition::kNoSource, 6917 new (Z) LocalVariable(TokenPosition::kNoSource, TokenPosition::kNoSource,
6900 Symbols::AsyncOperation(), Object::dynamic_type()); 6918 Symbols::AsyncOperation(), Object::dynamic_type());
6901 current_block_->scope->AddVariable(async_op_var); 6919 current_block_->scope->AddVariable(async_op_var);
6902 LocalVariable* async_then_callback_var = new (Z) 6920 LocalVariable* async_then_callback_var = new (Z)
6903 LocalVariable(TokenPosition::kNoSource, TokenPosition::kNoSource, 6921 LocalVariable(TokenPosition::kNoSource, TokenPosition::kNoSource,
6904 Symbols::AsyncThenCallback(), Object::dynamic_type()); 6922 Symbols::AsyncThenCallback(), Object::dynamic_type());
6905 current_block_->scope->AddVariable(async_then_callback_var); 6923 current_block_->scope->AddVariable(async_then_callback_var);
6906 LocalVariable* async_catch_error_callback_var = new (Z) 6924 LocalVariable* async_catch_error_callback_var = new (Z)
6907 LocalVariable(TokenPosition::kNoSource, TokenPosition::kNoSource, 6925 LocalVariable(TokenPosition::kNoSource, TokenPosition::kNoSource,
6908 Symbols::AsyncCatchErrorCallback(), Object::dynamic_type()); 6926 Symbols::AsyncCatchErrorCallback(), Object::dynamic_type());
6909 current_block_->scope->AddVariable(async_catch_error_callback_var); 6927 current_block_->scope->AddVariable(async_catch_error_callback_var);
6928 LocalVariable* async_stack_trace = new (Z)
6929 LocalVariable(TokenPosition::kNoSource, TokenPosition::kNoSource,
6930 Symbols::AsyncStackTraceVar(), Object::dynamic_type());
6931 current_block_->scope->AddVariable(async_stack_trace);
6910 } 6932 }
6911 6933
6912 6934
6913 RawFunction* Parser::OpenAsyncGeneratorFunction(TokenPosition async_func_pos) { 6935 RawFunction* Parser::OpenAsyncGeneratorFunction(TokenPosition async_func_pos) {
6914 TRACE_PARSER("OpenAsyncGeneratorFunction"); 6936 TRACE_PARSER("OpenAsyncGeneratorFunction");
6915 AddContinuationVariables(); 6937 AddContinuationVariables();
6916 AddAsyncGeneratorVariables(); 6938 AddAsyncGeneratorVariables();
6917 6939
6918 Function& closure = Function::Handle(Z); 6940 Function& closure = Function::Handle(Z);
6919 bool is_new_closure = false; 6941 bool is_new_closure = false;
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
6997 ASSERT((existing_var != NULL) && existing_var->is_captured()); 7019 ASSERT((existing_var != NULL) && existing_var->is_captured());
6998 existing_var = 7020 existing_var =
6999 closure_body->scope()->LookupVariable(Symbols::AsyncOperation(), false); 7021 closure_body->scope()->LookupVariable(Symbols::AsyncOperation(), false);
7000 ASSERT((existing_var != NULL) && existing_var->is_captured()); 7022 ASSERT((existing_var != NULL) && existing_var->is_captured());
7001 existing_var = closure_body->scope()->LookupVariable( 7023 existing_var = closure_body->scope()->LookupVariable(
7002 Symbols::AsyncThenCallback(), false); 7024 Symbols::AsyncThenCallback(), false);
7003 ASSERT((existing_var != NULL) && existing_var->is_captured()); 7025 ASSERT((existing_var != NULL) && existing_var->is_captured());
7004 existing_var = closure_body->scope()->LookupVariable( 7026 existing_var = closure_body->scope()->LookupVariable(
7005 Symbols::AsyncCatchErrorCallback(), false); 7027 Symbols::AsyncCatchErrorCallback(), false);
7006 ASSERT((existing_var != NULL) && existing_var->is_captured()); 7028 ASSERT((existing_var != NULL) && existing_var->is_captured());
7029 existing_var = closure_body->scope()->LookupVariable(
7030 Symbols::AsyncStackTraceVar(), false);
7031 ASSERT((existing_var != NULL) && existing_var->is_captured());
7007 7032
7008 const Library& async_lib = Library::Handle(Library::AsyncLibrary()); 7033 const Library& async_lib = Library::Handle(Library::AsyncLibrary());
7009 7034
7010 const Class& controller_class = Class::Handle( 7035 const Class& controller_class = Class::Handle(
7011 Z, 7036 Z,
7012 async_lib.LookupClassAllowPrivate(Symbols::_AsyncStarStreamController())); 7037 async_lib.LookupClassAllowPrivate(Symbols::_AsyncStarStreamController()));
7013 ASSERT(!controller_class.IsNull()); 7038 ASSERT(!controller_class.IsNull());
7014 const Function& controller_constructor = Function::ZoneHandle( 7039 const Function& controller_constructor = Function::ZoneHandle(
7015 Z, controller_class.LookupConstructorAllowPrivate( 7040 Z, controller_class.LookupConstructorAllowPrivate(
7016 Symbols::_AsyncStarStreamControllerConstructor())); 7041 Symbols::_AsyncStarStreamControllerConstructor()));
7017 7042
7018 // :await_jump_var = -1; 7043 // :await_jump_var = -1;
7019 LocalVariable* jump_var = 7044 LocalVariable* jump_var =
7020 current_block_->scope->LookupVariable(Symbols::AwaitJumpVar(), false); 7045 current_block_->scope->LookupVariable(Symbols::AwaitJumpVar(), false);
7021 LiteralNode* init_value = new (Z) 7046 LiteralNode* init_value = new (Z)
7022 LiteralNode(TokenPosition::kNoSource, Smi::ZoneHandle(Smi::New(-1))); 7047 LiteralNode(TokenPosition::kNoSource, Smi::ZoneHandle(Smi::New(-1)));
7023 current_block_->statements->Add( 7048 current_block_->statements->Add(
7024 new (Z) StoreLocalNode(TokenPosition::kNoSource, jump_var, init_value)); 7049 new (Z) StoreLocalNode(TokenPosition::kNoSource, jump_var, init_value));
7025 7050
7051 TokenPosition token_pos = TokenPosition::kNoSource;
7052
7053 // Add to AST:
rmacnak 2017/01/26 18:05:58 if (FLAG_sane_async_stacks)
7054 // :async_stack_trace = _asyncStackTraceHelper();
7055 const Function& async_stack_trace_helper = Function::ZoneHandle(
7056 Z,
7057 async_lib.LookupFunctionAllowPrivate(Symbols::AsyncStackTraceHelper()));
7058 ASSERT(!async_stack_trace_helper.IsNull());
7059 ArgumentListNode* async_stack_trace_helper_args =
7060 new (Z) ArgumentListNode(TokenPosition::kNoSource);
7061 StaticCallNode* async_stack_trace_helper_call = new (Z) StaticCallNode(
7062 token_pos, async_stack_trace_helper, async_stack_trace_helper_args);
7063 LocalVariable* async_stack_trace_var = current_block_->scope->LookupVariable(
7064 Symbols::AsyncStackTraceVar(), false);
7065 StoreLocalNode* store_async_stack_trace = new (Z) StoreLocalNode(
7066 token_pos, async_stack_trace_var, async_stack_trace_helper_call);
7067 current_block_->statements->Add(store_async_stack_trace);
7068
7026 // Add to AST: 7069 // Add to AST:
7027 // :async_op = <closure>; (containing the original body) 7070 // :async_op = <closure>; (containing the original body)
7028 LocalVariable* async_op_var = 7071 LocalVariable* async_op_var =
7029 current_block_->scope->LookupVariable(Symbols::AsyncOperation(), false); 7072 current_block_->scope->LookupVariable(Symbols::AsyncOperation(), false);
7030 ClosureNode* closure_obj = new (Z) ClosureNode( 7073 ClosureNode* closure_obj = new (Z) ClosureNode(
7031 TokenPosition::kNoSource, closure_func, NULL, closure_body->scope()); 7074 TokenPosition::kNoSource, closure_func, NULL, closure_body->scope());
7032 StoreLocalNode* store_async_op = new (Z) 7075 StoreLocalNode* store_async_op = new (Z)
7033 StoreLocalNode(TokenPosition::kNoSource, async_op_var, closure_obj); 7076 StoreLocalNode(TokenPosition::kNoSource, async_op_var, closure_obj);
7034 7077
7035 current_block_->statements->Add(store_async_op); 7078 current_block_->statements->Add(store_async_op);
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
7159 // closure body in order to mark them as captured. 7202 // closure body in order to mark them as captured.
7160 LocalVariable* existing_var = 7203 LocalVariable* existing_var =
7161 closure_body->scope()->LookupVariable(Symbols::AwaitJumpVar(), false); 7204 closure_body->scope()->LookupVariable(Symbols::AwaitJumpVar(), false);
7162 ASSERT((existing_var != NULL) && existing_var->is_captured()); 7205 ASSERT((existing_var != NULL) && existing_var->is_captured());
7163 existing_var = 7206 existing_var =
7164 closure_body->scope()->LookupVariable(Symbols::AwaitContextVar(), false); 7207 closure_body->scope()->LookupVariable(Symbols::AwaitContextVar(), false);
7165 ASSERT((existing_var != NULL) && existing_var->is_captured()); 7208 ASSERT((existing_var != NULL) && existing_var->is_captured());
7166 existing_var = 7209 existing_var =
7167 closure_body->scope()->LookupVariable(Symbols::AsyncCompleter(), false); 7210 closure_body->scope()->LookupVariable(Symbols::AsyncCompleter(), false);
7168 ASSERT((existing_var != NULL) && existing_var->is_captured()); 7211 ASSERT((existing_var != NULL) && existing_var->is_captured());
7212 existing_var = closure_body->scope()->LookupVariable(
7213 Symbols::AsyncStackTraceVar(), false);
7214 ASSERT((existing_var != NULL) && existing_var->is_captured());
7169 7215
7170 // Create and return a new future that executes a closure with the current 7216 // Create and return a new future that executes a closure with the current
7171 // body. 7217 // body.
7172 7218
7173 // No need to capture parameters or other variables, since they have already 7219 // No need to capture parameters or other variables, since they have already
7174 // been captured in the corresponding scope as the body has been parsed within 7220 // been captured in the corresponding scope as the body has been parsed within
7175 // a nested block (contained in the async function's block). 7221 // a nested block (contained in the async function's block).
7176 const Class& future = Class::ZoneHandle(Z, I->object_store()->future_class()); 7222 const Class& future = Class::ZoneHandle(Z, I->object_store()->future_class());
7177 ASSERT(!future.IsNull()); 7223 ASSERT(!future.IsNull());
7178 const Function& constructor = Function::ZoneHandle( 7224 const Function& constructor = Function::ZoneHandle(
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
7211 // :async_op = <closure>; (containing the original body) 7257 // :async_op = <closure>; (containing the original body)
7212 LocalVariable* async_op_var = 7258 LocalVariable* async_op_var =
7213 current_block_->scope->LookupVariable(Symbols::AsyncOperation(), false); 7259 current_block_->scope->LookupVariable(Symbols::AsyncOperation(), false);
7214 ClosureNode* cn = 7260 ClosureNode* cn =
7215 new (Z) ClosureNode(token_pos, closure, NULL, closure_body->scope()); 7261 new (Z) ClosureNode(token_pos, closure, NULL, closure_body->scope());
7216 StoreLocalNode* store_async_op = 7262 StoreLocalNode* store_async_op =
7217 new (Z) StoreLocalNode(token_pos, async_op_var, cn); 7263 new (Z) StoreLocalNode(token_pos, async_op_var, cn);
7218 current_block_->statements->Add(store_async_op); 7264 current_block_->statements->Add(store_async_op);
7219 7265
7220 const Library& async_lib = Library::Handle(Library::AsyncLibrary()); 7266 const Library& async_lib = Library::Handle(Library::AsyncLibrary());
7267
7268 // Add to AST:
rmacnak 2017/01/26 18:05:58 if (FLAG_sane_async_stacks)
Cutch 2017/01/31 23:45:31 Done.
7269 // :async_stack_trace = _asyncStackTraceHelper();
7270 const Function& async_stack_trace_helper = Function::ZoneHandle(
7271 Z,
7272 async_lib.LookupFunctionAllowPrivate(Symbols::AsyncStackTraceHelper()));
7273 ASSERT(!async_stack_trace_helper.IsNull());
7274 ArgumentListNode* async_stack_trace_helper_args =
7275 new (Z) ArgumentListNode(token_pos);
7276 StaticCallNode* async_stack_trace_helper_call = new (Z) StaticCallNode(
7277 token_pos, async_stack_trace_helper, async_stack_trace_helper_args);
7278 LocalVariable* async_stack_trace_var = current_block_->scope->LookupVariable(
7279 Symbols::AsyncStackTraceVar(), false);
7280 StoreLocalNode* store_async_stack_trace = new (Z) StoreLocalNode(
7281 token_pos, async_stack_trace_var, async_stack_trace_helper_call);
7282 current_block_->statements->Add(store_async_stack_trace);
7283
7221 // :async_then_callback = _asyncThenWrapperHelper(:async_op) 7284 // :async_then_callback = _asyncThenWrapperHelper(:async_op)
7222 const Function& async_then_wrapper_helper = Function::ZoneHandle( 7285 const Function& async_then_wrapper_helper = Function::ZoneHandle(
7223 Z, 7286 Z,
7224 async_lib.LookupFunctionAllowPrivate(Symbols::AsyncThenWrapperHelper())); 7287 async_lib.LookupFunctionAllowPrivate(Symbols::AsyncThenWrapperHelper()));
7225 ASSERT(!async_then_wrapper_helper.IsNull()); 7288 ASSERT(!async_then_wrapper_helper.IsNull());
7226 ArgumentListNode* async_then_wrapper_helper_args = 7289 ArgumentListNode* async_then_wrapper_helper_args =
7227 new (Z) ArgumentListNode(token_pos); 7290 new (Z) ArgumentListNode(token_pos);
7228 async_then_wrapper_helper_args->Add( 7291 async_then_wrapper_helper_args->Add(
7229 new (Z) LoadLocalNode(token_pos, async_op_var)); 7292 new (Z) LoadLocalNode(token_pos, async_op_var));
7230 StaticCallNode* then_wrapper_call = new (Z) StaticCallNode( 7293 StaticCallNode* then_wrapper_call = new (Z) StaticCallNode(
(...skipping 7437 matching lines...) Expand 10 before | Expand all | Expand 10 after
14668 const ArgumentListNode& function_args, 14731 const ArgumentListNode& function_args,
14669 const LocalVariable* temp_for_last_arg, 14732 const LocalVariable* temp_for_last_arg,
14670 bool is_super_invocation) { 14733 bool is_super_invocation) {
14671 UNREACHABLE(); 14734 UNREACHABLE();
14672 return NULL; 14735 return NULL;
14673 } 14736 }
14674 14737
14675 } // namespace dart 14738 } // namespace dart
14676 14739
14677 #endif // DART_PRECOMPILED_RUNTIME 14740 #endif // DART_PRECOMPILED_RUNTIME
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698