OLD | NEW |
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, 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 #if !defined(DART_PRECOMPILED_RUNTIME) | 4 #if !defined(DART_PRECOMPILED_RUNTIME) |
5 #include "vm/flow_graph_inliner.h" | 5 #include "vm/flow_graph_inliner.h" |
6 | 6 |
7 #include "vm/aot_optimizer.h" | 7 #include "vm/aot_optimizer.h" |
8 #include "vm/precompiler.h" | 8 #include "vm/precompiler.h" |
9 #include "vm/block_scheduler.h" | 9 #include "vm/block_scheduler.h" |
10 #include "vm/branch_optimizer.h" | 10 #include "vm/branch_optimizer.h" |
(...skipping 845 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
856 function.set_is_inlinable(false); | 856 function.set_is_inlinable(false); |
857 TRACE_INLINING(THR_Print(" Bailout: optional arg mismatch\n")); | 857 TRACE_INLINING(THR_Print(" Bailout: optional arg mismatch\n")); |
858 PRINT_INLINING_TREE("Optional arg mismatch", &call_data->caller, | 858 PRINT_INLINING_TREE("Optional arg mismatch", &call_data->caller, |
859 &function, call_data->call); | 859 &function, call_data->call); |
860 return false; | 860 return false; |
861 } | 861 } |
862 } | 862 } |
863 | 863 |
864 // After treating optional parameters the actual/formal count must | 864 // After treating optional parameters the actual/formal count must |
865 // match. | 865 // match. |
866 ASSERT(arguments->length() == function.NumParameters()); | 866 // TODO(regis): Consider type arguments in arguments. |
| 867 if (arguments->length() != function.NumParameters()) { |
| 868 ASSERT(function.IsGeneric()); |
| 869 ASSERT(arguments->length() == function.NumParameters() + 1); |
| 870 TRACE_INLINING( |
| 871 THR_Print(" Bailout: unsupported type arguments\n")); |
| 872 PRINT_INLINING_TREE("Unsupported type arguments", &call_data->caller, |
| 873 &function, call_data->call); |
| 874 return false; |
| 875 } |
867 ASSERT(param_stubs->length() == callee_graph->parameter_count()); | 876 ASSERT(param_stubs->length() == callee_graph->parameter_count()); |
868 | 877 |
869 // Update try-index of the callee graph. | 878 // Update try-index of the callee graph. |
870 BlockEntryInstr* call_block = call_data->call->GetBlock(); | 879 BlockEntryInstr* call_block = call_data->call->GetBlock(); |
871 if (call_block->InsideTryBlock()) { | 880 if (call_block->InsideTryBlock()) { |
872 intptr_t try_index = call_block->try_index(); | 881 intptr_t try_index = call_block->try_index(); |
873 for (BlockIterator it = callee_graph->reverse_postorder_iterator(); | 882 for (BlockIterator it = callee_graph->reverse_postorder_iterator(); |
874 !it.Done(); it.Advance()) { | 883 !it.Done(); it.Advance()) { |
875 BlockEntryInstr* block = it.Current(); | 884 BlockEntryInstr* block = it.Current(); |
876 block->set_try_index(try_index); | 885 block->set_try_index(try_index); |
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1334 const Array& argument_names, | 1343 const Array& argument_names, |
1335 GrowableArray<Value*>* arguments, | 1344 GrowableArray<Value*>* arguments, |
1336 ZoneGrowableArray<Definition*>* param_stubs, | 1345 ZoneGrowableArray<Definition*>* param_stubs, |
1337 FlowGraph* callee_graph) { | 1346 FlowGraph* callee_graph) { |
1338 const Function& function = parsed_function.function(); | 1347 const Function& function = parsed_function.function(); |
1339 // The language and this code does not support both optional positional | 1348 // The language and this code does not support both optional positional |
1340 // and optional named parameters for the same function. | 1349 // and optional named parameters for the same function. |
1341 ASSERT(!function.HasOptionalPositionalParameters() || | 1350 ASSERT(!function.HasOptionalPositionalParameters() || |
1342 !function.HasOptionalNamedParameters()); | 1351 !function.HasOptionalNamedParameters()); |
1343 | 1352 |
| 1353 // TODO(regis): Consider type arguments in arguments. |
1344 intptr_t arg_count = arguments->length(); | 1354 intptr_t arg_count = arguments->length(); |
1345 intptr_t param_count = function.NumParameters(); | 1355 intptr_t param_count = function.NumParameters(); |
1346 intptr_t fixed_param_count = function.num_fixed_parameters(); | 1356 intptr_t fixed_param_count = function.num_fixed_parameters(); |
1347 ASSERT(fixed_param_count <= arg_count); | 1357 ASSERT(fixed_param_count <= arg_count); |
1348 ASSERT(arg_count <= param_count); | 1358 ASSERT(arg_count <= param_count); |
1349 | 1359 |
1350 if (function.HasOptionalPositionalParameters()) { | 1360 if (function.HasOptionalPositionalParameters()) { |
1351 // Create a stub for each optional positional parameters with an actual. | 1361 // Create a stub for each optional positional parameters with an actual. |
1352 for (intptr_t i = fixed_param_count; i < arg_count; ++i) { | 1362 for (intptr_t i = fixed_param_count; i < arg_count; ++i) { |
1353 param_stubs->Add(CreateParameterStub(i, (*arguments)[i], callee_graph)); | 1363 param_stubs->Add(CreateParameterStub(i, (*arguments)[i], callee_graph)); |
(...skipping 2429 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3783 } | 3793 } |
3784 | 3794 |
3785 default: | 3795 default: |
3786 return false; | 3796 return false; |
3787 } | 3797 } |
3788 } | 3798 } |
3789 | 3799 |
3790 | 3800 |
3791 } // namespace dart | 3801 } // namespace dart |
3792 #endif // !defined(DART_PRECOMPILED_RUNTIME) | 3802 #endif // !defined(DART_PRECOMPILED_RUNTIME) |
OLD | NEW |