Index: src/compiler/code-generator.cc |
diff --git a/src/compiler/code-generator.cc b/src/compiler/code-generator.cc |
index 574d1ae8e939cd3127c8563b90675dbf8d641e6f..f8815fdb2fc5d9abf00a16a26c404c0600da7d24 100644 |
--- a/src/compiler/code-generator.cc |
+++ b/src/compiler/code-generator.cc |
@@ -266,7 +266,7 @@ void CodeGenerator::AddSafepointAndDeopt(Instruction* instr) { |
// Make sure all the values live in stack slots or they are immediates. |
// (The values should not live in register because registers are clobbered |
// by calls.) |
- for (int i = 0; i < descriptor->size(); i++) { |
+ for (size_t i = 0; i < descriptor->size(); i++) { |
InstructionOperand* op = instr->InputAt(frame_state_offset + 1 + i); |
CHECK(op->IsStackSlot() || op->IsImmediate()); |
} |
@@ -301,26 +301,33 @@ void CodeGenerator::BuildTranslationForFrameStateDescriptor( |
OutputFrameStateCombine state_combine) { |
// Outer-most state must be added to translation first. |
if (descriptor->outer_state() != NULL) { |
- BuildTranslationForFrameStateDescriptor( |
- descriptor->outer_state(), instr, translation, |
- frame_state_offset + descriptor->size(), kIgnoreOutput); |
+ BuildTranslationForFrameStateDescriptor(descriptor->outer_state(), instr, |
+ translation, frame_state_offset, |
+ kIgnoreOutput); |
} |
- int height = descriptor->size() - descriptor->parameters_count(); |
- switch (state_combine) { |
- case kPushOutput: |
- height++; |
+ int id = Translation::kSelfLiteralId; |
+ if (!descriptor->jsfunction().IsNull()) { |
+ id = DefineDeoptimizationLiteral( |
+ Handle<Object>::cast(descriptor->jsfunction().handle())); |
+ } |
+ |
+ switch (descriptor->type()) { |
+ case JS_FRAME: |
+ translation->BeginJSFrame(descriptor->bailout_id(), id, |
+ descriptor->GetHeight(state_combine)); |
break; |
- case kIgnoreOutput: |
+ case ARGUMENTS_ADAPTOR: |
+ translation->BeginArgumentsAdaptorFrame(id, |
+ descriptor->parameters_count()); |
break; |
} |
- translation->BeginJSFrame(descriptor->bailout_id(), |
- Translation::kSelfLiteralId, height); |
- |
- for (int i = 0; i < descriptor->size(); i++) { |
- AddTranslationForOperand(translation, instr, |
- instr->InputAt(i + frame_state_offset)); |
+ for (size_t i = 0; i < descriptor->size(); i++) { |
+ AddTranslationForOperand( |
+ translation, instr, |
+ instr->InputAt(frame_state_offset + |
+ descriptor->outer_state()->GetTotalSize() + i)); |
Jarin
2014/09/15 13:37:51
How about adding descriptor->outer_state()->GetTot
sigurds
2014/09/16 08:39:03
Done.
|
} |
switch (state_combine) { |
@@ -341,8 +348,8 @@ int CodeGenerator::BuildTranslation(Instruction* instr, int pc_offset, |
GetFrameStateDescriptor(instr, frame_state_offset); |
frame_state_offset++; |
- int frame_count = descriptor->GetFrameCount(); |
- Translation translation(&translations_, frame_count, frame_count, zone()); |
+ Translation translation(&translations_, descriptor->GetFrameCount(), |
+ descriptor->GetJSFrameCount(), zone()); |
BuildTranslationForFrameStateDescriptor(descriptor, instr, &translation, |
frame_state_offset, state_combine); |