Chromium Code Reviews| Index: src/frames.h |
| diff --git a/src/frames.h b/src/frames.h |
| index ef52ec86160b3f3e678a1f45ae176747da23b61b..9b5bb80ef870874b3c086ba15aff6554349f3dfd 100644 |
| --- a/src/frames.h |
| +++ b/src/frames.h |
| @@ -97,9 +97,10 @@ class StackHandler BASE_EMBEDDED { |
| V(EXIT, ExitFrame) \ |
| V(JAVA_SCRIPT, JavaScriptFrame) \ |
| V(OPTIMIZED, OptimizedFrame) \ |
| - V(WASM, WasmFrame) \ |
| + V(WASM_COMPILED, WasmCompiledFrame) \ |
| V(WASM_TO_JS, WasmToJsFrame) \ |
| V(JS_TO_WASM, JsToWasmFrame) \ |
| + V(WASM_TO_INTERPRETER, WasmToInterpreterFrame) \ |
|
titzer
2017/01/10 18:54:56
Can we name this WASM_INTERPRETER_ENTRY?
Clemens Hammacher
2017/01/11 08:39:15
Renamed
- Code::WASM_TO_INTERPRETER to Code::WASM_
|
| V(INTERPRETED, InterpretedFrame) \ |
| V(STUB, StubFrame) \ |
| V(STUB_FAILURE_TRAMPOLINE, StubFailureTrampolineFrame) \ |
| @@ -463,9 +464,10 @@ class StackFrame BASE_EMBEDDED { |
| bool is_exit() const { return type() == EXIT; } |
| bool is_optimized() const { return type() == OPTIMIZED; } |
| bool is_interpreted() const { return type() == INTERPRETED; } |
| - bool is_wasm() const { return type() == WASM; } |
| + bool is_wasm_compiled() const { return type() == WASM_COMPILED; } |
| bool is_wasm_to_js() const { return type() == WASM_TO_JS; } |
| bool is_js_to_wasm() const { return type() == JS_TO_WASM; } |
| + bool is_wasm_to_interpreter() const { return type() == WASM_TO_INTERPRETER; } |
|
titzer
2017/01/10 18:54:56
same here.
Clemens Hammacher
2017/01/11 08:39:15
Done.
|
| bool is_arguments_adaptor() const { return type() == ARGUMENTS_ADAPTOR; } |
| bool is_builtin() const { return type() == BUILTIN; } |
| bool is_internal() const { return type() == INTERNAL; } |
| @@ -481,6 +483,10 @@ class StackFrame BASE_EMBEDDED { |
| return (type == JAVA_SCRIPT) || (type == OPTIMIZED) || |
| (type == INTERPRETED) || (type == BUILTIN); |
| } |
| + bool is_wasm() const { |
| + Type type = this->type(); |
| + return type == WASM_COMPILED || type == WASM_TO_INTERPRETER; |
| + } |
| // Accessors. |
| Address sp() const { return state_.sp; } |
| @@ -729,7 +735,7 @@ class BuiltinExitFrame : public ExitFrame { |
| friend class StackFrameIteratorBase; |
| }; |
| -class JavaScriptFrame; |
| +class StandardFrame; |
| class FrameSummary BASE_EMBEDDED { |
| public: |
| @@ -744,7 +750,7 @@ class FrameSummary BASE_EMBEDDED { |
| AbstractCode* abstract_code, int code_offset, |
| bool is_constructor, Mode mode = kExactSummary); |
| - static FrameSummary GetFirst(JavaScriptFrame* frame); |
| + static FrameSummary GetFirst(StandardFrame* frame); |
| Handle<Object> receiver() const { return receiver_; } |
| Handle<JSFunction> function() const { return function_; } |
| @@ -787,6 +793,11 @@ class StandardFrame : public StackFrame { |
| // Check if this frame is a constructor frame invoked through 'new'. |
| virtual bool IsConstructor() const; |
| + // Build a list with summaries for this frame including all inlined frames. |
| + virtual void Summarize( |
| + List<FrameSummary>* frames, |
| + FrameSummary::Mode mode = FrameSummary::kExactSummary) const; |
| + |
| static StandardFrame* cast(StackFrame* frame) { |
| DCHECK(frame->is_standard()); |
| return static_cast<StandardFrame*>(frame); |
| @@ -836,10 +847,9 @@ class JavaScriptFrame : public StandardFrame { |
| public: |
| Type type() const override { return JAVA_SCRIPT; } |
| - // Build a list with summaries for this frame including all inlined frames. |
| - virtual void Summarize( |
| + void Summarize( |
| List<FrameSummary>* frames, |
| - FrameSummary::Mode mode = FrameSummary::kExactSummary) const; |
| + FrameSummary::Mode mode = FrameSummary::kExactSummary) const override; |
| // Accessors. |
| virtual JSFunction* function() const; |
| @@ -1091,9 +1101,9 @@ class BuiltinFrame final : public JavaScriptFrame { |
| friend class StackFrameIteratorBase; |
| }; |
| -class WasmFrame : public StandardFrame { |
| +class WasmCompiledFrame : public StandardFrame { |
| public: |
| - Type type() const override { return WASM; } |
| + Type type() const override { return WASM_COMPILED; } |
| // GC support. |
| void Iterate(ObjectVisitor* v) const override; |
| @@ -1116,13 +1126,53 @@ class WasmFrame : public StandardFrame { |
| int position() const override; |
| bool at_to_number_conversion() const; |
| - static WasmFrame* cast(StackFrame* frame) { |
| - DCHECK(frame->is_wasm()); |
| - return static_cast<WasmFrame*>(frame); |
| + void Summarize(List<FrameSummary>* frames, |
| + FrameSummary::Mode mode) const override; |
| + |
| + static WasmCompiledFrame* cast(StackFrame* frame) { |
| + DCHECK(frame->is_wasm_compiled()); |
| + return static_cast<WasmCompiledFrame*>(frame); |
| + } |
| + |
| + protected: |
| + inline explicit WasmCompiledFrame(StackFrameIteratorBase* iterator); |
| + |
| + Address GetCallerStackPointer() const override; |
| + |
| + private: |
| + friend class StackFrameIteratorBase; |
| +}; |
| + |
| +class WasmToInterpreterFrame : public StandardFrame { |
| + public: |
| + Type type() const override { return WASM_TO_INTERPRETER; } |
| + |
| + // GC support. |
| + void Iterate(ObjectVisitor* v) const override; |
| + |
| + // Printing support. |
| + void Print(StringStream* accumulator, PrintMode mode, |
| + int index) const override; |
| + |
| + void Summarize( |
| + List<FrameSummary>* frames, |
| + FrameSummary::Mode mode = FrameSummary::kExactSummary) const override; |
| + |
| + // Determine the code for the frame. |
| + Code* unchecked_code() const override; |
| + |
| + // Accessors. |
| + WasmInstanceObject* wasm_instance() const; |
| + Script* script() const override; |
| + int position() const override; |
| + |
| + static WasmToInterpreterFrame* cast(StackFrame* frame) { |
| + DCHECK(frame->is_wasm_to_interpreter()); |
| + return static_cast<WasmToInterpreterFrame*>(frame); |
| } |
| protected: |
| - inline explicit WasmFrame(StackFrameIteratorBase* iterator); |
| + inline explicit WasmToInterpreterFrame(StackFrameIteratorBase* iterator); |
| Address GetCallerStackPointer() const override; |
| @@ -1313,7 +1363,9 @@ class StackTraceFrameIterator BASE_EMBEDDED { |
| inline bool is_javascript() const; |
| inline bool is_wasm() const; |
| inline JavaScriptFrame* javascript_frame() const; |
| - inline WasmFrame* wasm_frame() const; |
| + // TODO(clemensh): Remove / refactor this for general wasm frames |
| + // (compiled/interpreted). |
| + inline WasmCompiledFrame* wasm_compiled_frame() const; |
| // Advance to the frame holding the arguments for the current |
| // frame. This only affects the current frame if it is a javascript frame and |