Index: src/x64/lithium-codegen-x64.cc |
diff --git a/src/x64/lithium-codegen-x64.cc b/src/x64/lithium-codegen-x64.cc |
index e0512147735ca5b6d3260c4ff63a5cb098b045e6..b14fa8b34a851065decdce931d56591ef8a64e57 100644 |
--- a/src/x64/lithium-codegen-x64.cc |
+++ b/src/x64/lithium-codegen-x64.cc |
@@ -368,7 +368,11 @@ void LCodeGen::WriteTranslation(LEnvironment* environment, |
WriteTranslation(environment->outer(), translation); |
int closure_id = DefineDeoptimizationLiteral(environment->closure()); |
- translation->BeginFrame(environment->ast_id(), closure_id, height); |
+ if (environment->is_arguments_adaptor()) { |
+ translation->BeginArgumentsAdaptorFrame(closure_id, translation_size); |
+ } else { |
+ translation->BeginJSFrame(environment->ast_id(), closure_id, height); |
+ } |
for (int i = 0; i < translation_size; ++i) { |
LOperand* value = environment->values()->at(i); |
// spilled_registers_ and spilled_double_registers_ are either |
@@ -504,10 +508,14 @@ void LCodeGen::RegisterEnvironmentForDeoptimization(LEnvironment* environment, |
// |>------------ translation_size ------------<| |
int frame_count = 0; |
+ int jsframe_count = 0; |
for (LEnvironment* e = environment; e != NULL; e = e->outer()) { |
++frame_count; |
+ if (!e->is_arguments_adaptor()) { |
+ ++jsframe_count; |
+ } |
} |
- Translation translation(&translations_, frame_count); |
+ Translation translation(&translations_, frame_count, jsframe_count); |
WriteTranslation(environment, &translation); |
int deoptimization_index = deoptimizations_.length(); |
int pc_offset = masm()->pc_offset(); |