Index: src/ia32/lithium-codegen-ia32.cc |
diff --git a/src/ia32/lithium-codegen-ia32.cc b/src/ia32/lithium-codegen-ia32.cc |
index 976b23448df38cc2b902e6222db918263764ebde..a594c6628eb7b075e30e979f8ea903e8fc40d323 100644 |
--- a/src/ia32/lithium-codegen-ia32.cc |
+++ b/src/ia32/lithium-codegen-ia32.cc |
@@ -394,7 +394,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 |
@@ -543,10 +547,14 @@ void LCodeGen::RegisterEnvironmentForDeoptimization( |
// |>------------ 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(); |