Index: src/deoptimizer.cc |
diff --git a/src/deoptimizer.cc b/src/deoptimizer.cc |
index f7791d210ec3c6dde23c3f060775a5b976412b47..532b96f47c8b03db9b5651bf65789e1df2509c57 100644 |
--- a/src/deoptimizer.cc |
+++ b/src/deoptimizer.cc |
@@ -11,6 +11,7 @@ |
#include "src/frames-inl.h" |
#include "src/full-codegen/full-codegen.h" |
#include "src/global-handles.h" |
+#include "src/interpreter/interpreter.h" |
#include "src/macro-assembler.h" |
#include "src/profiler/cpu-profiler.h" |
#include "src/v8.h" |
@@ -1180,13 +1181,21 @@ void Deoptimizer::DoComputeInterpretedFrame(int frame_index) { |
DCHECK(!is_bottommost || input_->GetFrameSlot(input_offset) == value); |
WriteValueToOutput(function, 0, frame_index, output_offset, "function "); |
- // TODO(rmcilroy): Deal with new.target correctly - currently just set it to |
+ // The new.target slot is only used during function activiation which is |
+ // before the first deopt point, so should never be needed. Just set it to |
// undefined. |
output_offset -= kPointerSize; |
input_offset -= kPointerSize; |
Object* new_target = isolate_->heap()->undefined_value(); |
WriteValueToOutput(new_target, 0, frame_index, output_offset, "new_target "); |
+ // Set the dispatch table pointer. |
+ output_offset -= kPointerSize; |
+ input_offset -= kPointerSize; |
+ Address dispatch_table = isolate()->interpreter()->dispatch_table_address(); |
+ WriteValueToOutput(reinterpret_cast<Object*>(dispatch_table), 0, frame_index, |
+ output_offset, "dispatch_table "); |
+ |
// The bytecode offset was mentioned explicitly in the BEGIN_FRAME. |
output_offset -= kPointerSize; |
input_offset -= kPointerSize; |