Index: src/deoptimizer.cc |
diff --git a/src/deoptimizer.cc b/src/deoptimizer.cc |
index d29cb6056347d63f30ef9643a833dd4f90c6cb59..711911459dca2e396a427b23d091483f5ce1dfc3 100644 |
--- a/src/deoptimizer.cc |
+++ b/src/deoptimizer.cc |
@@ -154,8 +154,11 @@ DeoptimizedFrameInfo* Deoptimizer::DebuggerInspectableFrame( |
// Always use the actual stack slots when calculating the fp to sp |
// delta adding two for the function and context. |
unsigned stack_slots = code->stack_slots(); |
+ unsigned arguments_stack_height = |
+ Deoptimizer::ComputeOutgoingArgumentSize(code, deoptimization_index); |
unsigned fp_to_sp_delta = (stack_slots * kPointerSize) + |
- StandardFrameConstants::kFixedFrameSizeFromFp; |
+ StandardFrameConstants::kFixedFrameSizeFromFp + |
+ arguments_stack_height; |
Deoptimizer* deoptimizer = new Deoptimizer(isolate, |
function, |
@@ -1770,7 +1773,8 @@ unsigned Deoptimizer::ComputeInputFrameSize() const { |
StandardFrameConstants::kFixedFrameSizeFromFp; |
if (compiled_code_->kind() == Code::OPTIMIZED_FUNCTION) { |
unsigned stack_slots = compiled_code_->stack_slots(); |
- unsigned outgoing_size = ComputeOutgoingArgumentSize(); |
+ unsigned outgoing_size = |
+ ComputeOutgoingArgumentSize(compiled_code_, bailout_id_); |
CHECK(result == fixed_size + (stack_slots * kPointerSize) + outgoing_size); |
} |
return result; |
@@ -1798,10 +1802,12 @@ unsigned Deoptimizer::ComputeIncomingArgumentSize(JSFunction* function) const { |
} |
-unsigned Deoptimizer::ComputeOutgoingArgumentSize() const { |
+// static |
+unsigned Deoptimizer::ComputeOutgoingArgumentSize(Code* code, |
+ unsigned bailout_id) { |
DeoptimizationInputData* data = |
- DeoptimizationInputData::cast(compiled_code_->deoptimization_data()); |
- unsigned height = data->ArgumentsStackHeight(bailout_id_)->value(); |
+ DeoptimizationInputData::cast(code->deoptimization_data()); |
+ unsigned height = data->ArgumentsStackHeight(bailout_id)->value(); |
return height * kPointerSize; |
} |