Index: src/ppc/full-codegen-ppc.cc |
diff --git a/src/ppc/full-codegen-ppc.cc b/src/ppc/full-codegen-ppc.cc |
index 3ff2fc43e11c39127d954cee6b6ea9d1143eb52b..5ff5a9eed6f964c343dd2b751bac34340319513b 100644 |
--- a/src/ppc/full-codegen-ppc.cc |
+++ b/src/ppc/full-codegen-ppc.cc |
@@ -245,6 +245,11 @@ void FullCodeGenerator::Generate() { |
} |
} |
+ ArgumentsAccessStub::HasNewTarget has_new_target = |
+ IsSubclassConstructor(info->function()->kind()) |
+ ? ArgumentsAccessStub::HAS_NEW_TARGET |
+ : ArgumentsAccessStub::NO_NEW_TARGET; |
+ |
// Possibly allocate RestParameters |
int rest_index; |
Variable* rest_param = scope()->rest_parameter(&rest_index); |
@@ -253,6 +258,11 @@ void FullCodeGenerator::Generate() { |
int num_parameters = info->scope()->num_parameters(); |
int offset = num_parameters * kPointerSize; |
+ if (has_new_target == ArgumentsAccessStub::HAS_NEW_TARGET) { |
+ --num_parameters; |
+ ++rest_index; |
+ } |
+ |
__ addi(r6, fp, Operand(StandardFrameConstants::kCallerSPOffset + offset)); |
__ mov(r5, Operand(Smi::FromInt(num_parameters))); |
__ mov(r4, Operand(Smi::FromInt(rest_index))); |
@@ -285,10 +295,6 @@ void FullCodeGenerator::Generate() { |
// function, receiver address, parameter count. |
// The stub will rewrite receiever and parameter count if the previous |
// stack frame was an arguments adapter frame. |
- ArgumentsAccessStub::HasNewTarget has_new_target = |
- IsSubclassConstructor(info->function()->kind()) |
- ? ArgumentsAccessStub::HAS_NEW_TARGET |
- : ArgumentsAccessStub::NO_NEW_TARGET; |
ArgumentsAccessStub::Type type; |
if (is_strict(language_mode()) || !is_simple_parameter_list()) { |
type = ArgumentsAccessStub::NEW_STRICT; |