Index: src/x87/full-codegen-x87.cc |
diff --git a/src/x87/full-codegen-x87.cc b/src/x87/full-codegen-x87.cc |
index 8eee524253cc2e72235b7f9d73b06b19bfb9dce1..66758c4cc9a254e9a926dbcff8ddcc35a8db7aa0 100644 |
--- a/src/x87/full-codegen-x87.cc |
+++ b/src/x87/full-codegen-x87.cc |
@@ -233,6 +233,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); |
@@ -241,6 +246,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; |
+ } |
+ |
__ lea(edx, |
Operand(ebp, StandardFrameConstants::kCallerSPOffset + offset)); |
__ push(edx); |
@@ -281,10 +291,7 @@ void FullCodeGenerator::Generate() { |
} else { |
type = ArgumentsAccessStub::NEW_SLOPPY_FAST; |
} |
- ArgumentsAccessStub::HasNewTarget has_new_target = |
- IsSubclassConstructor(info->function()->kind()) |
- ? ArgumentsAccessStub::HAS_NEW_TARGET |
- : ArgumentsAccessStub::NO_NEW_TARGET; |
+ |
ArgumentsAccessStub stub(isolate(), type, has_new_target); |
__ CallStub(&stub); |