Index: src/frames.h |
diff --git a/src/frames.h b/src/frames.h |
index e112f52ff85836bca81da02cf735819e2f3964d4..16ebba5f61fdbfec0a79a5c1b9755d40c3978ed3 100644 |
--- a/src/frames.h |
+++ b/src/frames.h |
@@ -640,8 +640,29 @@ class ExitFrame: public StackFrame { |
friend class StackFrameIteratorBase; |
}; |
+class FrameSummary BASE_EMBEDDED { |
+ public: |
+ FrameSummary(Object* receiver, JSFunction* function, |
+ AbstractCode* abstract_code, int code_offset, |
+ bool is_constructor); |
+ |
+ Handle<Object> receiver() { return receiver_; } |
+ Handle<JSFunction> function() { return function_; } |
+ Handle<AbstractCode> abstract_code() { return abstract_code_; } |
+ int code_offset() { return code_offset_; } |
+ bool is_constructor() { return is_constructor_; } |
+ |
+ void Print(); |
+ |
+ private: |
+ Handle<Object> receiver_; |
+ Handle<JSFunction> function_; |
+ Handle<AbstractCode> abstract_code_; |
+ int code_offset_; |
+ bool is_constructor_; |
+}; |
-class StandardFrame: public StackFrame { |
+class StandardFrame : public StackFrame { |
public: |
// Testers. |
bool is_standard() const override { return true; } |
@@ -661,6 +682,13 @@ class StandardFrame: public StackFrame { |
return static_cast<StandardFrame*>(frame); |
} |
+ // Build a list with summaries for this frame including all inlined frames. |
+ virtual void Summarize(List<FrameSummary>* frames) const; |
+ |
+ // Accessors. |
+ virtual JSFunction* function() const; |
+ virtual Object* receiver() const; |
+ |
protected: |
inline explicit StandardFrame(StackFrameIteratorBase* iterator); |
@@ -702,35 +730,13 @@ class StandardFrame: public StackFrame { |
}; |
-class FrameSummary BASE_EMBEDDED { |
- public: |
- FrameSummary(Object* receiver, JSFunction* function, |
- AbstractCode* abstract_code, int code_offset, |
- bool is_constructor); |
- |
- Handle<Object> receiver() { return receiver_; } |
- Handle<JSFunction> function() { return function_; } |
- Handle<AbstractCode> abstract_code() { return abstract_code_; } |
- int code_offset() { return code_offset_; } |
- bool is_constructor() { return is_constructor_; } |
- |
- void Print(); |
- |
- private: |
- Handle<Object> receiver_; |
- Handle<JSFunction> function_; |
- Handle<AbstractCode> abstract_code_; |
- int code_offset_; |
- bool is_constructor_; |
-}; |
- |
class JavaScriptFrame : public StandardFrame { |
public: |
Type type() const override { return JAVA_SCRIPT; } |
- // Accessors. |
- inline JSFunction* function() const; |
- inline Object* receiver() const; |
+ JSFunction* function() const override; |
+ Object* receiver() const override; |
+ |
inline void set_receiver(Object* value); |
// Access the parameters. |
@@ -777,8 +783,7 @@ class JavaScriptFrame : public StandardFrame { |
// Return a list with JSFunctions of this frame. |
virtual void GetFunctions(List<JSFunction*>* functions) const; |
- // Build a list with summaries for this frame including all inlined frames. |
- virtual void Summarize(List<FrameSummary>* frames); |
+ void Summarize(List<FrameSummary>* frames) const override; |
// Lookup exception handler for current {pc}, returns -1 if none found. Also |
// returns data associated with the handler site specific to the frame type: |
@@ -856,7 +861,7 @@ class OptimizedFrame : public JavaScriptFrame { |
// is the top-most activation) |
void GetFunctions(List<JSFunction*>* functions) const override; |
- void Summarize(List<FrameSummary>* frames) override; |
+ void Summarize(List<FrameSummary>* frames) const override; |
// Lookup exception handler for current {pc}, returns -1 if none found. |
int LookupExceptionHandlerInTable( |
@@ -902,7 +907,7 @@ class InterpretedFrame : public JavaScriptFrame { |
Object* GetInterpreterRegister(int register_index) const; |
// Build a list with summaries for this frame including all inlined frames. |
- void Summarize(List<FrameSummary>* frames) override; |
+ void Summarize(List<FrameSummary>* frames) const override; |
protected: |
inline explicit InterpretedFrame(StackFrameIteratorBase* iterator); |
@@ -965,6 +970,8 @@ class WasmFrame : public StandardFrame { |
return static_cast<WasmFrame*>(frame); |
} |
+ JSFunction* function() const override; |
+ |
protected: |
inline explicit WasmFrame(StackFrameIteratorBase* iterator); |
@@ -1142,17 +1149,25 @@ class JavaScriptFrameIterator BASE_EMBEDDED { |
StackFrameIterator iterator_; |
}; |
-// NOTE: The stack trace frame iterator is an iterator that only |
-// traverse proper JavaScript frames; that is JavaScript frames that |
-// have proper JavaScript functions. This excludes the problematic |
-// functions in runtime.js. |
-class StackTraceFrameIterator: public JavaScriptFrameIterator { |
+// NOTE: The stack trace frame iterator is an iterator that only traverse proper |
+// JavaScript frames that have proper JavaScript functions and WASM frames. |
+// This excludes the problematic functions in runtime.js. |
+class StackTraceFrameIterator BASE_EMBEDDED { |
public: |
explicit StackTraceFrameIterator(Isolate* isolate); |
+ bool done() const { return iterator_.done(); } |
void Advance(); |
+ inline StandardFrame* frame() const; |
+ |
+ inline bool is_javascript() const; |
+ inline bool is_wasm() const; |
+ inline JavaScriptFrame* javascript_frame() const; |
+ inline WasmFrame* wasm_frame() const; |
+ |
private: |
- bool IsValidFrame(); |
+ StackFrameIterator iterator_; |
+ bool IsValidFrame(StackFrame* frame) const; |
}; |