| Index: src/frames.cc
|
| diff --git a/src/frames.cc b/src/frames.cc
|
| index a57d28bde6c454562dd07e2df0ca6095a36c9940..6c73e21285417ed9901d8a50bb6fb0bd6db1d644 100644
|
| --- a/src/frames.cc
|
| +++ b/src/frames.cc
|
| @@ -1142,7 +1142,6 @@ int InterpretedFrame::LookupExceptionHandlerInTable(
|
| return table->LookupRange(pc_offset, context_register, prediction);
|
| }
|
|
|
| -
|
| int InterpretedFrame::GetBytecodeOffset() const {
|
| const int index = InterpreterFrameConstants::kBytecodeOffsetExpressionIndex;
|
| DCHECK_EQ(InterpreterFrameConstants::kBytecodeOffsetFromFp,
|
| @@ -1151,7 +1150,6 @@ int InterpretedFrame::GetBytecodeOffset() const {
|
| return raw_offset - BytecodeArray::kHeaderSize + kHeapObjectTag;
|
| }
|
|
|
| -
|
| void InterpretedFrame::PatchBytecodeOffset(int new_offset) {
|
| const int index = InterpreterFrameConstants::kBytecodeOffsetExpressionIndex;
|
| DCHECK_EQ(InterpreterFrameConstants::kBytecodeOffsetFromFp,
|
| @@ -1167,6 +1165,17 @@ Object* InterpretedFrame::GetInterpreterRegister(int register_index) const {
|
| return GetExpression(index + register_index);
|
| }
|
|
|
| +Address InterpretedFrame::GetDispatchTable() const {
|
| + return Memory::Address_at(
|
| + fp() + InterpreterFrameConstants::kDispatchTableFromFp);
|
| +}
|
| +
|
| +void InterpretedFrame::PatchDispatchTable(Address dispatch_table) {
|
| + Address* dispatch_table_address = reinterpret_cast<Address*>(
|
| + fp() + InterpreterFrameConstants::kDispatchTableFromFp);
|
| + *dispatch_table_address = dispatch_table;
|
| +}
|
| +
|
| void InterpretedFrame::Summarize(List<FrameSummary>* functions) {
|
| DCHECK(functions->length() == 0);
|
| AbstractCode* abstract_code =
|
| @@ -1418,6 +1427,22 @@ void JavaScriptFrame::Iterate(ObjectVisitor* v) const {
|
| IteratePc(v, pc_address(), constant_pool_address(), LookupCode());
|
| }
|
|
|
| +void InterpretedFrame::Iterate(ObjectVisitor* v) const {
|
| + // Visit tagged pointers in the fixed frame.
|
| + Object** fixed_frame_base =
|
| + &Memory::Object_at(fp() + InterpreterFrameConstants::kNewTargetFromFp);
|
| + Object** fixed_frame_limit =
|
| + &Memory::Object_at(fp() + StandardFrameConstants::kLastObjectOffset) + 1;
|
| + v->VisitPointers(fixed_frame_base, fixed_frame_limit);
|
| +
|
| + // Visit the expressions.
|
| + Object** expression_base = &Memory::Object_at(sp());
|
| + Object** expression_limit = &Memory::Object_at(
|
| + fp() + InterpreterFrameConstants::kBytecodeOffsetFromFp) + 1;
|
| + v->VisitPointers(expression_base, expression_limit);
|
| +
|
| + IteratePc(v, pc_address(), constant_pool_address(), LookupCode());
|
| +}
|
|
|
| void InternalFrame::Iterate(ObjectVisitor* v) const {
|
| // Internal frames only have object pointers on the expression stack
|
|
|