Chromium Code Reviews| Index: src/frames.h |
| diff --git a/src/frames.h b/src/frames.h |
| index f6806d7563ba89b83bc1f60cd517de9cb3edffee..94540a6c224a37e472e6ffbcfb55a97a914cfd0c 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. |
| @@ -778,8 +784,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: |
| @@ -857,7 +862,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( |
| @@ -903,7 +908,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); |
| @@ -966,6 +971,8 @@ class WasmFrame : public StandardFrame { |
| return static_cast<WasmFrame*>(frame); |
| } |
| + JSFunction* function() const override; |
| + |
| protected: |
| inline explicit WasmFrame(StackFrameIteratorBase* iterator); |
| @@ -1143,17 +1150,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. |
|
titzer
2016/04/06 09:53:23
parens not necessary here
Clemens Hammacher
2016/04/06 10:18:29
Acknowledged.
|
| +// 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 isJS() const; |
| + inline bool isWasm() const; |
| + inline JavaScriptFrame* jsFrame() const; |
| + inline WasmFrame* wasmFrame() const; |
| + |
| private: |
| - bool IsValidFrame(); |
| + StackFrameIterator iterator_; |
| + bool IsValidFrame(StackFrame* frame) const; |
| }; |