Index: src/frames-inl.h |
diff --git a/src/frames-inl.h b/src/frames-inl.h |
index ef51e0d5767d6935b5b266d23e070c1bcc9ce002..bc2ff4fb6a8b5d74d57bec9e667af00c6b6f18db 100644 |
--- a/src/frames-inl.h |
+++ b/src/frames-inl.h |
@@ -101,10 +101,30 @@ inline ExitFrame::ExitFrame(StackFrameIteratorBase* iterator) |
inline BuiltinExitFrame::BuiltinExitFrame(StackFrameIteratorBase* iterator) |
: ExitFrame(iterator) {} |
-inline Object* BuiltinExitFrame::function_slot_object() const { |
+inline Object* BuiltinExitFrame::target_slot_object() const { |
return Memory::Object_at(fp() + BuiltinExitFrameConstants::kTargetOffset); |
} |
+inline Object* BuiltinExitFrame::new_target_slot_object() const { |
+ return Memory::Object_at(fp() + BuiltinExitFrameConstants::kNewTargetOffset); |
+} |
+ |
+inline Object* BuiltinExitFrame::receiver_slot_object() const { |
+ // The receiver is the first argument on the frame. |
+ // fp[1]: return address. |
+ // fp[2]: the last argument (new target). |
+ // fp[4]: argc. |
+ // fp[2 + argc - 1]: receiver. |
+ Object* argc_slot = |
+ Memory::Object_at(fp() + BuiltinExitFrameConstants::kArgcOffset); |
+ DCHECK(argc_slot->IsSmi()); |
+ int argc = Smi::cast(argc_slot)->value(); |
+ |
+ const int receiverOffset = |
+ BuiltinExitFrameConstants::kNewTargetOffset + (argc - 1) * kPointerSize; |
+ return Memory::Object_at(fp() + receiverOffset); |
+} |
+ |
inline StandardFrame::StandardFrame(StackFrameIteratorBase* iterator) |
: StackFrame(iterator) { |
} |