| OLD | NEW |
| 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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/kernel_binary_flowgraph.h" | 5 #include "vm/kernel_binary_flowgraph.h" |
| 6 #include "vm/compiler.h" | 6 #include "vm/compiler.h" |
| 7 #include "vm/longjump.h" | 7 #include "vm/longjump.h" |
| 8 #include "vm/object_store.h" | 8 #include "vm/object_store.h" |
| 9 | 9 |
| 10 #if !defined(DART_PRECOMPILED_RUNTIME) | 10 #if !defined(DART_PRECOMPILED_RUNTIME) |
| (...skipping 6391 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6402 instructions += LoadLocal(closure); | 6402 instructions += LoadLocal(closure); |
| 6403 instructions += Constant(function); | 6403 instructions += Constant(function); |
| 6404 instructions += | 6404 instructions += |
| 6405 StoreInstanceField(TokenPosition::kNoSource, Closure::function_offset()); | 6405 StoreInstanceField(TokenPosition::kNoSource, Closure::function_offset()); |
| 6406 | 6406 |
| 6407 instructions += LoadLocal(closure); | 6407 instructions += LoadLocal(closure); |
| 6408 instructions += LoadLocal(context); | 6408 instructions += LoadLocal(context); |
| 6409 instructions += | 6409 instructions += |
| 6410 StoreInstanceField(TokenPosition::kNoSource, Closure::context_offset()); | 6410 StoreInstanceField(TokenPosition::kNoSource, Closure::context_offset()); |
| 6411 | 6411 |
| 6412 instructions += Drop(); | |
| 6413 | |
| 6414 SkipDartType(); // skip function type of the closure. | 6412 SkipDartType(); // skip function type of the closure. |
| 6415 | 6413 |
| 6416 // TODO(30455): Kernel generic methods undone. When generic methods are | 6414 // TODO(30455): Kernel generic methods undone. When generic methods are |
| 6417 // fully supported in kernel, we'll need to store a NULL in the type arguments | 6415 // fully supported in kernel, we'll need to store a NULL in the type arguments |
| 6418 // slot when type arguments are absent, so the wrapper for the target function | 6416 // slot when type arguments are absent, so the wrapper for the target function |
| 6419 // can tell how many type args are captured vs. provided by the caller of the | 6417 // can tell how many type args are captured vs. provided by the caller of the |
| 6420 // closure. | 6418 // closure. |
| 6421 | 6419 |
| 6422 intptr_t types_count = ReadListLength(); // read type count. | 6420 intptr_t types_count = ReadListLength(); // read type count. |
| 6423 if (types_count > 0) { | 6421 if (types_count > 0) { |
| 6424 instructions += LoadLocal(context); | |
| 6425 | |
| 6426 const TypeArguments& type_args = | 6422 const TypeArguments& type_args = |
| 6427 T.BuildTypeArguments(types_count); // read list of type arguments. | 6423 T.BuildTypeArguments(types_count); // read list of type arguments. |
| 6428 instructions += TranslateInstantiatedTypeArguments(type_args); | 6424 instructions += TranslateInstantiatedTypeArguments(type_args); |
| 6425 LocalVariable* type_args_slot = MakeTemporary(); |
| 6429 | 6426 |
| 6427 instructions += LoadLocal(context); |
| 6428 instructions += LoadLocal(type_args_slot); |
| 6430 instructions += StoreInstanceField(TokenPosition::kNoSource, | 6429 instructions += StoreInstanceField(TokenPosition::kNoSource, |
| 6431 Context::variable_offset(0)); | 6430 Context::variable_offset(0)); |
| 6431 |
| 6432 instructions += LoadLocal(closure); |
| 6433 instructions += LoadLocal(type_args_slot); |
| 6434 instructions += StoreInstanceField( |
| 6435 TokenPosition::kNoSource, Closure::function_type_arguments_offset()); |
| 6436 |
| 6437 instructions += Drop(); // type args |
| 6432 } | 6438 } |
| 6433 | 6439 |
| 6440 instructions += Drop(); // context |
| 6434 return instructions; | 6441 return instructions; |
| 6435 } | 6442 } |
| 6436 | 6443 |
| 6437 Fragment StreamingFlowGraphBuilder::BuildInvalidStatement() { | 6444 Fragment StreamingFlowGraphBuilder::BuildInvalidStatement() { |
| 6438 H.ReportError("Invalid statements not implemented yet!"); | 6445 H.ReportError("Invalid statements not implemented yet!"); |
| 6439 return Fragment(); | 6446 return Fragment(); |
| 6440 } | 6447 } |
| 6441 | 6448 |
| 6442 Fragment StreamingFlowGraphBuilder::BuildExpressionStatement() { | 6449 Fragment StreamingFlowGraphBuilder::BuildExpressionStatement() { |
| 6443 Fragment instructions = BuildExpression(); // read expression. | 6450 Fragment instructions = BuildExpression(); // read expression. |
| (...skipping 1377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 7821 } | 7828 } |
| 7822 } | 7829 } |
| 7823 | 7830 |
| 7824 return Array::Handle(Array::null()); | 7831 return Array::Handle(Array::null()); |
| 7825 } | 7832 } |
| 7826 | 7833 |
| 7827 } // namespace kernel | 7834 } // namespace kernel |
| 7828 } // namespace dart | 7835 } // namespace dart |
| 7829 | 7836 |
| 7830 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 7837 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
| OLD | NEW |