| Index: src/frames.cc
|
| diff --git a/src/frames.cc b/src/frames.cc
|
| index d60ab29c4e62c2e60cc52a7b1cf54378076ed8e3..dfaf3ca5e4d6e838caf31913e62d46ec88375f10 100644
|
| --- a/src/frames.cc
|
| +++ b/src/frames.cc
|
| @@ -1128,6 +1128,33 @@ Object* OptimizedFrame::StackSlotAt(int index) const {
|
| }
|
|
|
|
|
| +int InterpretedFrame::LookupExceptionHandlerInTable(
|
| + int* stack_slots, HandlerTable::CatchPrediction* prediction) {
|
| + BytecodeArray* bytecode = function()->shared()->bytecode_array();
|
| + HandlerTable* table = HandlerTable::cast(bytecode->handler_table());
|
| + int pc_offset = GetBytecodeOffset() + 1; // Point after current bytecode.
|
| + return table->LookupRange(pc_offset, stack_slots, prediction);
|
| +}
|
| +
|
| +
|
| +int InterpretedFrame::GetBytecodeOffset() const {
|
| + const int index = InterpreterFrameConstants::kBytecodeOffsetExpressionIndex;
|
| + DCHECK_EQ(InterpreterFrameConstants::kBytecodeOffsetFromFp,
|
| + StandardFrameConstants::kExpressionsOffset - index * kPointerSize);
|
| + int raw_offset = Smi::cast(GetExpression(index))->value();
|
| + return raw_offset - BytecodeArray::kHeaderSize + kHeapObjectTag;
|
| +}
|
| +
|
| +
|
| +void InterpretedFrame::PatchBytecodeOffset(int new_offset) {
|
| + const int index = InterpreterFrameConstants::kBytecodeOffsetExpressionIndex;
|
| + DCHECK_EQ(InterpreterFrameConstants::kBytecodeOffsetFromFp,
|
| + StandardFrameConstants::kExpressionsOffset - index * kPointerSize);
|
| + int raw_offset = new_offset + BytecodeArray::kHeaderSize - kHeapObjectTag;
|
| + SetExpression(index, Smi::FromInt(raw_offset));
|
| +}
|
| +
|
| +
|
| int ArgumentsAdaptorFrame::GetNumberOfIncomingArguments() const {
|
| return Smi::cast(GetExpression(0))->value();
|
| }
|
|
|