Index: src/frames-inl.h |
diff --git a/src/frames-inl.h b/src/frames-inl.h |
index 4013601dace9c121bf722b131e6a71234dba2df5..c27267002061ce6b4c795ce04e855a27a2ca814f 100644 |
--- a/src/frames-inl.h |
+++ b/src/frames-inl.h |
@@ -151,11 +151,11 @@ inline bool StandardFrame::IsConstructFrame(Address fp) { |
return marker == Smi::FromInt(StackFrame::CONSTRUCT); |
} |
+inline VisibleFrame::VisibleFrame(StackFrameIteratorBase* iterator) |
+ : StandardFrame(iterator) {} |
inline JavaScriptFrame::JavaScriptFrame(StackFrameIteratorBase* iterator) |
- : StandardFrame(iterator) { |
-} |
- |
+ : VisibleFrame(iterator) {} |
Address JavaScriptFrame::GetParameterSlot(int index) const { |
int param_count = ComputeParametersCount(); |
@@ -242,6 +242,8 @@ inline ArgumentsAdaptorFrame::ArgumentsAdaptorFrame( |
StackFrameIteratorBase* iterator) : JavaScriptFrame(iterator) { |
} |
+inline WasmFrame::WasmFrame(StackFrameIteratorBase* iterator) |
+ : VisibleFrame(iterator) {} |
inline InternalFrame::InternalFrame(StackFrameIteratorBase* iterator) |
: StandardFrame(iterator) { |
@@ -257,27 +259,42 @@ inline ConstructFrame::ConstructFrame(StackFrameIteratorBase* iterator) |
: InternalFrame(iterator) { |
} |
- |
-inline JavaScriptFrameIterator::JavaScriptFrameIterator( |
- Isolate* isolate) |
+inline VisibleFrameIterator::VisibleFrameIterator(Isolate* isolate) |
: iterator_(isolate) { |
if (!done()) Advance(); |
} |
+inline VisibleFrameIterator::VisibleFrameIterator( |
+ Isolate* isolate, VisibleFrameIterator::NoAdvance) |
+ : iterator_(isolate) {} |
+ |
+inline VisibleFrameIterator::VisibleFrameIterator( |
+ Isolate* isolate, ThreadLocalTop* top, VisibleFrameIterator::NoAdvance) |
+ : iterator_(isolate, top) {} |
-inline JavaScriptFrameIterator::JavaScriptFrameIterator( |
- Isolate* isolate, ThreadLocalTop* top) |
- : iterator_(isolate, top) { |
+inline JavaScriptFrameIterator::JavaScriptFrameIterator(Isolate* isolate) |
+ : VisibleFrameIterator(isolate, VisibleFrameIterator::NoAdvance()) { |
if (!done()) Advance(); |
} |
+inline JavaScriptFrameIterator::JavaScriptFrameIterator(Isolate* isolate, |
+ ThreadLocalTop* top) |
+ : VisibleFrameIterator(isolate, top, VisibleFrameIterator::NoAdvance()) { |
+ if (!done()) Advance(); |
+} |
-inline JavaScriptFrame* JavaScriptFrameIterator::frame() const { |
+inline VisibleFrame* VisibleFrameIterator::frame() const { |
// TODO(1233797): The frame hierarchy needs to change. It's |
// problematic that we can't use the safe-cast operator to cast to |
// the JavaScript frame type, because we may encounter arguments |
// adaptor frames. |
StackFrame* frame = iterator_.frame(); |
+ DCHECK(frame->is_visible() || frame->is_arguments_adaptor()); |
+ return static_cast<VisibleFrame*>(frame); |
+} |
+ |
+inline JavaScriptFrame* JavaScriptFrameIterator::frame() const { |
+ StackFrame* frame = iterator_.frame(); |
DCHECK(frame->is_java_script() || frame->is_arguments_adaptor()); |
return static_cast<JavaScriptFrame*>(frame); |
} |