OLD | NEW |
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 | 8 #ifndef DART_PRECOMPILED |
9 | 9 |
10 #include "lib/invocation_mirror.h" | 10 #include "lib/invocation_mirror.h" |
(...skipping 1293 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1304 field_name = Field::NameFromGetter(field_name); | 1304 field_name = Field::NameFromGetter(field_name); |
1305 | 1305 |
1306 const Class& field_class = Class::Handle(Z, func.Owner()); | 1306 const Class& field_class = Class::Handle(Z, func.Owner()); |
1307 const Field& field = | 1307 const Field& field = |
1308 Field::ZoneHandle(Z, field_class.LookupInstanceField(field_name)); | 1308 Field::ZoneHandle(Z, field_class.LookupInstanceField(field_name)); |
1309 ASSERT(!field.IsNull()); | 1309 ASSERT(!field.IsNull()); |
1310 | 1310 |
1311 LoadInstanceFieldNode* load_field = | 1311 LoadInstanceFieldNode* load_field = |
1312 new LoadInstanceFieldNode(ident_pos, load_receiver, field); | 1312 new LoadInstanceFieldNode(ident_pos, load_receiver, field); |
1313 | 1313 |
1314 ReturnNode* return_node = new ReturnNode(Scanner::kNoSourcePos, load_field); | 1314 ReturnNode* return_node = new ReturnNode(ident_pos, load_field); |
1315 current_block_->statements->Add(return_node); | 1315 current_block_->statements->Add(return_node); |
1316 return CloseBlock(); | 1316 return CloseBlock(); |
1317 } | 1317 } |
1318 | 1318 |
1319 | 1319 |
1320 // Create AstNodes for an implicit instance setter method: | 1320 // Create AstNodes for an implicit instance setter method: |
1321 // LoadLocalNode 0 ('this') | 1321 // LoadLocalNode 0 ('this') |
1322 // LoadLocalNode 1 ('value') | 1322 // LoadLocalNode 1 ('value') |
1323 // SetInstanceField (field_name); | 1323 // SetInstanceField (field_name); |
1324 // ReturnNode (void); | 1324 // ReturnNode (void); |
(...skipping 23 matching lines...) Expand all Loading... |
1348 | 1348 |
1349 LoadLocalNode* receiver = | 1349 LoadLocalNode* receiver = |
1350 new LoadLocalNode(ident_pos, current_block_->scope->VariableAt(0)); | 1350 new LoadLocalNode(ident_pos, current_block_->scope->VariableAt(0)); |
1351 LoadLocalNode* value = | 1351 LoadLocalNode* value = |
1352 new LoadLocalNode(ident_pos, current_block_->scope->VariableAt(1)); | 1352 new LoadLocalNode(ident_pos, current_block_->scope->VariableAt(1)); |
1353 | 1353 |
1354 EnsureExpressionTemp(); | 1354 EnsureExpressionTemp(); |
1355 StoreInstanceFieldNode* store_field = | 1355 StoreInstanceFieldNode* store_field = |
1356 new StoreInstanceFieldNode(ident_pos, receiver, field, value); | 1356 new StoreInstanceFieldNode(ident_pos, receiver, field, value); |
1357 current_block_->statements->Add(store_field); | 1357 current_block_->statements->Add(store_field); |
1358 current_block_->statements->Add(new ReturnNode(Scanner::kNoSourcePos)); | 1358 current_block_->statements->Add(new ReturnNode(ident_pos)); |
1359 return CloseBlock(); | 1359 return CloseBlock(); |
1360 } | 1360 } |
1361 | 1361 |
1362 | 1362 |
1363 SequenceNode* Parser::ParseConstructorClosure(const Function& func) { | 1363 SequenceNode* Parser::ParseConstructorClosure(const Function& func) { |
1364 TRACE_PARSER("ParseConstructorClosure"); | 1364 TRACE_PARSER("ParseConstructorClosure"); |
1365 const intptr_t token_pos = func.token_pos(); | 1365 const intptr_t token_pos = func.token_pos(); |
1366 | 1366 |
1367 Function& constructor = Function::ZoneHandle(Z); | 1367 Function& constructor = Function::ZoneHandle(Z); |
1368 TypeArguments& type_args = TypeArguments::ZoneHandle(Z); | 1368 TypeArguments& type_args = TypeArguments::ZoneHandle(Z); |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1476 return CloseBlock(); | 1476 return CloseBlock(); |
1477 } | 1477 } |
1478 | 1478 |
1479 | 1479 |
1480 SequenceNode* Parser::ParseMethodExtractor(const Function& func) { | 1480 SequenceNode* Parser::ParseMethodExtractor(const Function& func) { |
1481 TRACE_PARSER("ParseMethodExtractor"); | 1481 TRACE_PARSER("ParseMethodExtractor"); |
1482 | 1482 |
1483 ParamList params; | 1483 ParamList params; |
1484 | 1484 |
1485 const intptr_t ident_pos = func.token_pos(); | 1485 const intptr_t ident_pos = func.token_pos(); |
1486 ASSERT(func.token_pos() == 0); | 1486 ASSERT(func.token_pos() == ClassifyingTokenPositions::kMethodExtractor); |
1487 ASSERT(current_class().raw() == func.Owner()); | 1487 ASSERT(current_class().raw() == func.Owner()); |
1488 params.AddReceiver(ReceiverType(current_class()), ident_pos); | 1488 params.AddReceiver(ReceiverType(current_class()), ident_pos); |
1489 ASSERT(func.num_fixed_parameters() == 1); // Receiver. | 1489 ASSERT(func.num_fixed_parameters() == 1); // Receiver. |
1490 ASSERT(!func.HasOptionalParameters()); | 1490 ASSERT(!func.HasOptionalParameters()); |
1491 | 1491 |
1492 // Build local scope for function and populate with the formal parameters. | 1492 // Build local scope for function and populate with the formal parameters. |
1493 OpenFunctionBlock(func); | 1493 OpenFunctionBlock(func); |
1494 AddFormalParamsToScope(¶ms, current_block_->scope); | 1494 AddFormalParamsToScope(¶ms, current_block_->scope); |
1495 | 1495 |
1496 // Receiver is local 0. | 1496 // Receiver is local 0. |
1497 LocalVariable* receiver = current_block_->scope->VariableAt(0); | 1497 LocalVariable* receiver = current_block_->scope->VariableAt(0); |
1498 LoadLocalNode* load_receiver = new LoadLocalNode(ident_pos, receiver); | 1498 LoadLocalNode* load_receiver = new LoadLocalNode(ident_pos, receiver); |
1499 | 1499 |
1500 ClosureNode* closure = new ClosureNode( | 1500 ClosureNode* closure = new ClosureNode( |
1501 ident_pos, | 1501 ident_pos, |
1502 Function::ZoneHandle(Z, func.extracted_method_closure()), | 1502 Function::ZoneHandle(Z, func.extracted_method_closure()), |
1503 load_receiver, | 1503 load_receiver, |
1504 NULL); | 1504 NULL); |
1505 | 1505 |
1506 ReturnNode* return_node = new ReturnNode(Scanner::kNoSourcePos, closure); | 1506 ReturnNode* return_node = new ReturnNode(ident_pos, closure); |
1507 current_block_->statements->Add(return_node); | 1507 current_block_->statements->Add(return_node); |
1508 return CloseBlock(); | 1508 return CloseBlock(); |
1509 } | 1509 } |
1510 | 1510 |
1511 | 1511 |
1512 void Parser::BuildDispatcherScope(const Function& func, | 1512 void Parser::BuildDispatcherScope(const Function& func, |
1513 const ArgumentsDescriptor& desc) { | 1513 const ArgumentsDescriptor& desc) { |
1514 ParamList params; | 1514 ParamList params; |
1515 // Receiver first. | 1515 // Receiver first. |
1516 intptr_t token_pos = func.token_pos(); | 1516 intptr_t token_pos = func.token_pos(); |
(...skipping 1396 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2913 "forwarding to a super class constructor with optional " | 2913 "forwarding to a super class constructor with optional " |
2914 "parameters; add a constructor without optional parameters " | 2914 "parameters; add a constructor without optional parameters " |
2915 "to class '%s' that redirects to the constructor with " | 2915 "to class '%s' that redirects to the constructor with " |
2916 "optional parameters and invoke it via super from a " | 2916 "optional parameters and invoke it via super from a " |
2917 "constructor of the class extending the mixin application", | 2917 "constructor of the class extending the mixin application", |
2918 String::Handle(Z, super_class.Name()).ToCString()); | 2918 String::Handle(Z, super_class.Name()).ToCString()); |
2919 } | 2919 } |
2920 | 2920 |
2921 // Prepare user-defined arguments to be forwarded to super call. | 2921 // Prepare user-defined arguments to be forwarded to super call. |
2922 // The first user-defined argument is at position 1. | 2922 // The first user-defined argument is at position 1. |
2923 forwarding_args = new ArgumentListNode(Scanner::kNoSourcePos); | 2923 forwarding_args = new ArgumentListNode(ctor_pos); |
2924 for (int i = 1; i < func.NumParameters(); i++) { | 2924 for (int i = 1; i < func.NumParameters(); i++) { |
2925 LocalVariable* param = new LocalVariable( | 2925 LocalVariable* param = new LocalVariable( |
2926 Scanner::kNoSourcePos, | 2926 Scanner::kNoSourcePos, |
2927 String::ZoneHandle(Z, func.ParameterNameAt(i)), | 2927 String::ZoneHandle(Z, func.ParameterNameAt(i)), |
2928 Object::dynamic_type()); | 2928 Object::dynamic_type()); |
2929 current_block_->scope->InsertParameterAt(i, param); | 2929 current_block_->scope->InsertParameterAt(i, param); |
2930 forwarding_args->Add(new LoadLocalNode(Scanner::kNoSourcePos, param)); | 2930 forwarding_args->Add(new LoadLocalNode(ctor_pos, param)); |
2931 } | 2931 } |
2932 } | 2932 } |
2933 | 2933 |
2934 AstNode* super_call = GenerateSuperConstructorCall( | 2934 AstNode* super_call = GenerateSuperConstructorCall( |
2935 current_class(), | 2935 current_class(), |
2936 Scanner::kNoSourcePos, | 2936 ctor_pos, |
2937 receiver, | 2937 receiver, |
2938 forwarding_args); | 2938 forwarding_args); |
2939 if (super_call != NULL) { | 2939 if (super_call != NULL) { |
2940 current_block_->statements->Add(super_call); | 2940 current_block_->statements->Add(super_call); |
2941 } | 2941 } |
2942 CheckFieldsInitialized(current_class()); | 2942 CheckFieldsInitialized(current_class()); |
2943 | 2943 |
2944 // Empty constructor body. | 2944 // Empty constructor body. |
2945 current_block_->statements->Add(new ReturnNode(Scanner::kNoSourcePos)); | 2945 current_block_->statements->Add(new ReturnNode(ctor_pos)); |
2946 SequenceNode* statements = CloseBlock(); | 2946 SequenceNode* statements = CloseBlock(); |
2947 return statements; | 2947 return statements; |
2948 } | 2948 } |
2949 | 2949 |
2950 | 2950 |
2951 void Parser::CheckRecursiveInvocation() { | 2951 void Parser::CheckRecursiveInvocation() { |
2952 const GrowableObjectArray& pending_functions = | 2952 const GrowableObjectArray& pending_functions = |
2953 GrowableObjectArray::Handle(Z, T->pending_functions()); | 2953 GrowableObjectArray::Handle(Z, T->pending_functions()); |
2954 for (int i = 0; i < pending_functions.Length(); i++) { | 2954 for (int i = 0; i < pending_functions.Length(); i++) { |
2955 if (pending_functions.At(i) == current_function().raw()) { | 2955 if (pending_functions.At(i) == current_function().raw()) { |
(...skipping 4121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
7077 const Function& completer_constructor = Function::ZoneHandle(Z, | 7077 const Function& completer_constructor = Function::ZoneHandle(Z, |
7078 completer.LookupFunction(Symbols::CompleterSyncConstructor())); | 7078 completer.LookupFunction(Symbols::CompleterSyncConstructor())); |
7079 ASSERT(!completer_constructor.IsNull()); | 7079 ASSERT(!completer_constructor.IsNull()); |
7080 | 7080 |
7081 LocalVariable* async_completer = current_block_->scope->LookupVariable( | 7081 LocalVariable* async_completer = current_block_->scope->LookupVariable( |
7082 Symbols::AsyncCompleter(), false); | 7082 Symbols::AsyncCompleter(), false); |
7083 | 7083 |
7084 // Add to AST: | 7084 // Add to AST: |
7085 // :async_completer = new Completer.sync(); | 7085 // :async_completer = new Completer.sync(); |
7086 ArgumentListNode* empty_args = | 7086 ArgumentListNode* empty_args = |
7087 new (Z) ArgumentListNode(Scanner::kNoSourcePos); | 7087 new (Z) ArgumentListNode(closure_body->token_pos()); |
7088 ConstructorCallNode* completer_constructor_node = new (Z) ConstructorCallNode( | 7088 ConstructorCallNode* completer_constructor_node = new (Z) ConstructorCallNode( |
7089 Scanner::kNoSourcePos, | 7089 closure_body->token_pos(), |
7090 TypeArguments::ZoneHandle(Z), | 7090 TypeArguments::ZoneHandle(Z), |
7091 completer_constructor, | 7091 completer_constructor, |
7092 empty_args); | 7092 empty_args); |
7093 StoreLocalNode* store_completer = new (Z) StoreLocalNode( | 7093 StoreLocalNode* store_completer = new (Z) StoreLocalNode( |
7094 Scanner::kNoSourcePos, | 7094 closure_body->token_pos(), |
7095 async_completer, | 7095 async_completer, |
7096 completer_constructor_node); | 7096 completer_constructor_node); |
7097 current_block_->statements->Add(store_completer); | 7097 current_block_->statements->Add(store_completer); |
7098 | 7098 |
7099 // :await_jump_var = -1; | 7099 // :await_jump_var = -1; |
7100 LocalVariable* jump_var = | 7100 LocalVariable* jump_var = |
7101 current_block_->scope->LookupVariable(Symbols::AwaitJumpVar(), false); | 7101 current_block_->scope->LookupVariable(Symbols::AwaitJumpVar(), false); |
7102 LiteralNode* init_value = | 7102 LiteralNode* init_value = |
7103 new(Z) LiteralNode(Scanner::kNoSourcePos, Smi::ZoneHandle(Smi::New(-1))); | 7103 new(Z) LiteralNode(closure_body->token_pos(), |
| 7104 Smi::ZoneHandle(Smi::New(-1))); |
7104 current_block_->statements->Add( | 7105 current_block_->statements->Add( |
7105 new(Z) StoreLocalNode(Scanner::kNoSourcePos, jump_var, init_value)); | 7106 new(Z) StoreLocalNode(closure_body->token_pos(), jump_var, init_value)); |
7106 | 7107 |
7107 // Add to AST: | 7108 // Add to AST: |
7108 // :async_op = <closure>; (containing the original body) | 7109 // :async_op = <closure>; (containing the original body) |
7109 LocalVariable* async_op_var = current_block_->scope->LookupVariable( | 7110 LocalVariable* async_op_var = current_block_->scope->LookupVariable( |
7110 Symbols::AsyncOperation(), false); | 7111 Symbols::AsyncOperation(), false); |
7111 ClosureNode* cn = new(Z) ClosureNode( | 7112 ClosureNode* cn = new(Z) ClosureNode( |
7112 Scanner::kNoSourcePos, closure, NULL, closure_body->scope()); | 7113 closure_body->token_pos(), closure, NULL, closure_body->scope()); |
7113 StoreLocalNode* store_async_op = new (Z) StoreLocalNode( | 7114 StoreLocalNode* store_async_op = new (Z) StoreLocalNode( |
7114 Scanner::kNoSourcePos, | 7115 closure_body->token_pos(), |
7115 async_op_var, | 7116 async_op_var, |
7116 cn); | 7117 cn); |
7117 current_block_->statements->Add(store_async_op); | 7118 current_block_->statements->Add(store_async_op); |
7118 | 7119 |
7119 const Library& async_lib = Library::Handle(Library::AsyncLibrary()); | 7120 const Library& async_lib = Library::Handle(Library::AsyncLibrary()); |
7120 // :async_then_callback = _asyncThenWrapperHelper(:async_op) | 7121 // :async_then_callback = _asyncThenWrapperHelper(:async_op) |
7121 const Function& async_then_wrapper_helper = Function::ZoneHandle( | 7122 const Function& async_then_wrapper_helper = Function::ZoneHandle( |
7122 Z, async_lib.LookupFunctionAllowPrivate( | 7123 Z, async_lib.LookupFunctionAllowPrivate( |
7123 Symbols::AsyncThenWrapperHelper())); | 7124 Symbols::AsyncThenWrapperHelper())); |
7124 ASSERT(!async_then_wrapper_helper.IsNull()); | 7125 ASSERT(!async_then_wrapper_helper.IsNull()); |
7125 ArgumentListNode* async_then_wrapper_helper_args = new (Z) ArgumentListNode( | 7126 ArgumentListNode* async_then_wrapper_helper_args = new (Z) ArgumentListNode( |
7126 Scanner::kNoSourcePos); | 7127 closure_body->token_pos()); |
7127 async_then_wrapper_helper_args->Add( | 7128 async_then_wrapper_helper_args->Add( |
7128 new (Z) LoadLocalNode(Scanner::kNoSourcePos, async_op_var)); | 7129 new (Z) LoadLocalNode(closure_body->token_pos(), async_op_var)); |
7129 StaticCallNode* then_wrapper_call = new (Z) StaticCallNode( | 7130 StaticCallNode* then_wrapper_call = new (Z) StaticCallNode( |
7130 Scanner::kNoSourcePos, | 7131 closure_body->token_pos(), |
7131 async_then_wrapper_helper, | 7132 async_then_wrapper_helper, |
7132 async_then_wrapper_helper_args); | 7133 async_then_wrapper_helper_args); |
7133 LocalVariable* async_then_callback_var = | 7134 LocalVariable* async_then_callback_var = |
7134 current_block_->scope->LookupVariable( | 7135 current_block_->scope->LookupVariable( |
7135 Symbols::AsyncThenCallback(), false); | 7136 Symbols::AsyncThenCallback(), false); |
7136 StoreLocalNode* store_async_then_callback = new (Z) StoreLocalNode( | 7137 StoreLocalNode* store_async_then_callback = new (Z) StoreLocalNode( |
7137 Scanner::kNoSourcePos, | 7138 closure_body->token_pos(), |
7138 async_then_callback_var, | 7139 async_then_callback_var, |
7139 then_wrapper_call); | 7140 then_wrapper_call); |
7140 | 7141 |
7141 current_block_->statements->Add(store_async_then_callback); | 7142 current_block_->statements->Add(store_async_then_callback); |
7142 | 7143 |
7143 // :async_catch_error_callback = _asyncErrorWrapperHelper(:async_op) | 7144 // :async_catch_error_callback = _asyncErrorWrapperHelper(:async_op) |
7144 | 7145 |
7145 const Function& async_error_wrapper_helper = Function::ZoneHandle( | 7146 const Function& async_error_wrapper_helper = Function::ZoneHandle( |
7146 Z, async_lib.LookupFunctionAllowPrivate( | 7147 Z, async_lib.LookupFunctionAllowPrivate( |
7147 Symbols::AsyncErrorWrapperHelper())); | 7148 Symbols::AsyncErrorWrapperHelper())); |
7148 ASSERT(!async_error_wrapper_helper.IsNull()); | 7149 ASSERT(!async_error_wrapper_helper.IsNull()); |
7149 ArgumentListNode* async_error_wrapper_helper_args = new (Z) ArgumentListNode( | 7150 ArgumentListNode* async_error_wrapper_helper_args = new (Z) ArgumentListNode( |
7150 Scanner::kNoSourcePos); | 7151 closure_body->token_pos()); |
7151 async_error_wrapper_helper_args->Add( | 7152 async_error_wrapper_helper_args->Add( |
7152 new (Z) LoadLocalNode(Scanner::kNoSourcePos, async_op_var)); | 7153 new (Z) LoadLocalNode(closure_body->token_pos(), async_op_var)); |
7153 StaticCallNode* error_wrapper_call = new (Z) StaticCallNode( | 7154 StaticCallNode* error_wrapper_call = new (Z) StaticCallNode( |
7154 Scanner::kNoSourcePos, | 7155 closure_body->token_pos(), |
7155 async_error_wrapper_helper, | 7156 async_error_wrapper_helper, |
7156 async_error_wrapper_helper_args); | 7157 async_error_wrapper_helper_args); |
7157 LocalVariable* async_catch_error_callback_var = | 7158 LocalVariable* async_catch_error_callback_var = |
7158 current_block_->scope->LookupVariable( | 7159 current_block_->scope->LookupVariable( |
7159 Symbols::AsyncCatchErrorCallback(), false); | 7160 Symbols::AsyncCatchErrorCallback(), false); |
7160 StoreLocalNode* store_async_catch_error_callback = new (Z) StoreLocalNode( | 7161 StoreLocalNode* store_async_catch_error_callback = new (Z) StoreLocalNode( |
7161 Scanner::kNoSourcePos, | 7162 closure_body->token_pos(), |
7162 async_catch_error_callback_var, | 7163 async_catch_error_callback_var, |
7163 error_wrapper_call); | 7164 error_wrapper_call); |
7164 | 7165 |
7165 current_block_->statements->Add(store_async_catch_error_callback); | 7166 current_block_->statements->Add(store_async_catch_error_callback); |
7166 | 7167 |
7167 // Add to AST: | 7168 // Add to AST: |
7168 // new Future.microtask(:async_op); | 7169 // new Future.microtask(:async_op); |
7169 ArgumentListNode* arguments = new (Z) ArgumentListNode(Scanner::kNoSourcePos); | 7170 ArgumentListNode* arguments = |
| 7171 new (Z) ArgumentListNode(closure_body->token_pos()); |
7170 arguments->Add(new (Z) LoadLocalNode( | 7172 arguments->Add(new (Z) LoadLocalNode( |
7171 Scanner::kNoSourcePos, async_op_var)); | 7173 closure_body->token_pos(), async_op_var)); |
7172 ConstructorCallNode* future_node = new (Z) ConstructorCallNode( | 7174 ConstructorCallNode* future_node = new (Z) ConstructorCallNode( |
7173 Scanner::kNoSourcePos, TypeArguments::ZoneHandle(Z), constructor, | 7175 closure_body->token_pos(), TypeArguments::ZoneHandle(Z), constructor, |
7174 arguments); | 7176 arguments); |
7175 current_block_->statements->Add(future_node); | 7177 current_block_->statements->Add(future_node); |
7176 | 7178 |
7177 // Add to AST: | 7179 // Add to AST: |
7178 // return :async_completer.future; | 7180 // return :async_completer.future; |
7179 ReturnNode* return_node = new (Z) ReturnNode( | 7181 ReturnNode* return_node = new (Z) ReturnNode( |
7180 Scanner::kNoSourcePos, | 7182 closure_body->token_pos(), |
7181 new (Z) InstanceGetterNode( | 7183 new (Z) InstanceGetterNode( |
7182 Scanner::kNoSourcePos, | 7184 closure_body->token_pos(), |
7183 new (Z) LoadLocalNode( | 7185 new (Z) LoadLocalNode( |
7184 Scanner::kNoSourcePos, | 7186 closure_body->token_pos(), |
7185 async_completer), | 7187 async_completer), |
7186 Symbols::CompleterFuture())); | 7188 Symbols::CompleterFuture())); |
7187 current_block_->statements->Add(return_node); | 7189 current_block_->statements->Add(return_node); |
7188 return CloseBlock(); | 7190 return CloseBlock(); |
7189 } | 7191 } |
7190 | 7192 |
7191 | 7193 |
7192 SequenceNode* Parser::CloseAsyncClosure(SequenceNode* body) { | 7194 SequenceNode* Parser::CloseAsyncClosure(SequenceNode* body) { |
7193 // We need a temporary expression to store intermediate return values. | 7195 // We need a temporary expression to store intermediate return values. |
7194 parsed_function()->EnsureExpressionTemp(); | 7196 parsed_function()->EnsureExpressionTemp(); |
(...skipping 7201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
14396 const ArgumentListNode& function_args, | 14398 const ArgumentListNode& function_args, |
14397 const LocalVariable* temp_for_last_arg, | 14399 const LocalVariable* temp_for_last_arg, |
14398 bool is_super_invocation) { | 14400 bool is_super_invocation) { |
14399 UNREACHABLE(); | 14401 UNREACHABLE(); |
14400 return NULL; | 14402 return NULL; |
14401 } | 14403 } |
14402 | 14404 |
14403 } // namespace dart | 14405 } // namespace dart |
14404 | 14406 |
14405 #endif // DART_PRECOMPILED | 14407 #endif // DART_PRECOMPILED |
OLD | NEW |