Index: src/frames.h |
diff --git a/src/frames.h b/src/frames.h |
index 674d7daeca2bc27c29081eaff2e8dcff464df4fd..0cb69c59bffabaa31f1694eff7ad4c3f451dbf35 100644 |
--- a/src/frames.h |
+++ b/src/frames.h |
@@ -183,9 +183,14 @@ class InterpreterFrameConstants : public AllStatic { |
StandardFrameConstants::kFixedFrameSizeFromFp + 2 * kPointerSize; |
// FP-relative. |
+ static const int kBytecodeOffsetFromFp = |
+ -StandardFrameConstants::kFixedFrameSizeFromFp - 2 * kPointerSize; |
static const int kRegisterFilePointerFromFp = |
-StandardFrameConstants::kFixedFrameSizeFromFp - 3 * kPointerSize; |
+ // Expression index for {StandardFrame::GetExpressionAddress}. |
+ static const int kBytecodeOffsetExpressionIndex = 1; |
+ |
// Register file pointer relative. |
static const int kLastParamFromRegisterPointer = |
StandardFrameConstants::kFixedFrameSize + 3 * kPointerSize; |
@@ -249,6 +254,7 @@ class StackFrame BASE_EMBEDDED { |
bool is_entry_construct() const { return type() == ENTRY_CONSTRUCT; } |
bool is_exit() const { return type() == EXIT; } |
bool is_optimized() const { return type() == OPTIMIZED; } |
+ bool is_interpreted() const { return type() == INTERPRETED; } |
bool is_arguments_adaptor() const { return type() == ARGUMENTS_ADAPTOR; } |
bool is_internal() const { return type() == INTERNAL; } |
bool is_stub_failure_trampoline() const { |
@@ -711,8 +717,21 @@ class OptimizedFrame : public JavaScriptFrame { |
class InterpretedFrame : public JavaScriptFrame { |
+ public: |
Type type() const override { return INTERPRETED; } |
+ // Lookup exception handler for current {pc}, returns -1 if none found. Also |
+ // returns the expected number of stack slots at the handler site. |
+ int LookupExceptionHandlerInTable( |
+ int* stack_slots, HandlerTable::CatchPrediction* prediction) override; |
+ |
+ // Returns the current offset into the bytecode stream. |
+ int GetBytecodeOffset() const; |
+ |
+ // Updates the current offset into the bytecode stream, mainly used for stack |
+ // unwinding to continue execution at a different bytecode offset. |
+ void PatchBytecodeOffset(int new_offset); |
+ |
protected: |
inline explicit InterpretedFrame(StackFrameIteratorBase* iterator); |