| Index: runtime/vm/flow_graph_compiler_x64.cc
|
| diff --git a/runtime/vm/flow_graph_compiler_x64.cc b/runtime/vm/flow_graph_compiler_x64.cc
|
| index 1218af01ad715e8751211f74ee68000af3135d7e..4c60d209b6c83a739fa5104329bb978085df6a25 100644
|
| --- a/runtime/vm/flow_graph_compiler_x64.cc
|
| +++ b/runtime/vm/flow_graph_compiler_x64.cc
|
| @@ -1057,13 +1057,8 @@ void FlowGraphCompiler::CompileGraph() {
|
| // No such checking code is generated if only fixed parameters are declared,
|
| // unless we are in debug mode or unless we are compiling a closure.
|
| if (num_copied_params == 0) {
|
| -#ifdef DEBUG
|
| - ASSERT(!parsed_function().function().HasOptionalParameters());
|
| - const bool check_arguments = !flow_graph().IsCompiledForOsr();
|
| -#else
|
| const bool check_arguments =
|
| function.IsClosureFunction() && !flow_graph().IsCompiledForOsr();
|
| -#endif
|
| if (check_arguments) {
|
| __ Comment("Check argument count");
|
| // Check that exactly num_fixed arguments are passed in.
|
| @@ -1077,13 +1072,9 @@ void FlowGraphCompiler::CompileGraph() {
|
| __ j(EQUAL, &correct_num_arguments, Assembler::kNearJump);
|
|
|
| __ Bind(&wrong_num_arguments);
|
| - if (function.IsClosureFunction()) {
|
| - __ LeaveDartFrame(kKeepCalleePP); // Leave arguments on the stack.
|
| - __ Jmp(*StubCode::CallClosureNoSuchMethod_entry());
|
| - // The noSuchMethod call may return to the caller, but not here.
|
| - } else {
|
| - __ Stop("Wrong number of arguments");
|
| - }
|
| + __ LeaveDartFrame(kKeepCalleePP); // Leave arguments on the stack.
|
| + __ Jmp(*StubCode::CallClosureNoSuchMethod_entry());
|
| + // The noSuchMethod call may return to the caller, but not here.
|
| __ Bind(&correct_num_arguments);
|
| }
|
| } else if (!flow_graph().IsCompiledForOsr()) {
|
| @@ -1415,7 +1406,12 @@ void FlowGraphCompiler::EmitOptimizedStaticCall(
|
| intptr_t deopt_id,
|
| TokenPosition token_pos,
|
| LocationSummary* locs) {
|
| - __ LoadObject(R10, arguments_descriptor);
|
| + ASSERT(!function.IsClosureFunction());
|
| + if (function.HasOptionalParameters()) {
|
| + __ LoadObject(R10, arguments_descriptor);
|
| + } else {
|
| + __ xorq(R10, R10); // GC safe smi zero because of stub.
|
| + }
|
| // Do not use the code from the function, but let the code be patched so that
|
| // we can record the outgoing edges to other code.
|
| GenerateStaticDartCall(deopt_id,
|
|
|