Index: src/wasm/wasm-interpreter.cc |
diff --git a/src/wasm/wasm-interpreter.cc b/src/wasm/wasm-interpreter.cc |
index aa0884c50c2644c9f9d2d57e147eea0019cd6d2b..8709c0925b94686f67ec2f3a06c97d1642a297d4 100644 |
--- a/src/wasm/wasm-interpreter.cc |
+++ b/src/wasm/wasm-interpreter.cc |
@@ -1034,16 +1034,25 @@ class ThreadImpl : public WasmInterpreter::Thread { |
possible_nondeterminism_ = false; |
} |
- virtual int GetFrameCount() { return static_cast<int>(frames_.size()); } |
+ virtual int GetFrameCount() { |
+ DCHECK_GE(kMaxInt, frames_.size()); |
+ return static_cast<int>(frames_.size()); |
+ } |
- virtual const WasmFrame* GetFrame(int index) { |
- UNIMPLEMENTED(); |
- return nullptr; |
+ virtual const InterpretedFrame GetFrame(int index) { |
+ return GetMutableFrame(index); |
} |
- virtual WasmFrame* GetMutableFrame(int index) { |
- UNIMPLEMENTED(); |
- return nullptr; |
+ virtual InterpretedFrame GetMutableFrame(int index) { |
+ DCHECK_LE(0, index); |
+ DCHECK_GT(frames_.size(), index); |
+ Frame* fr = &frames_[index]; |
titzer
2017/01/16 10:18:25
Might as well spell out {frame} or call it {f}.
Clemens Hammacher
2017/01/16 11:53:26
Done. It's {frame} now.
|
+ DCHECK_GE(kMaxInt, fr->ret_pc); |
+ DCHECK_GE(kMaxInt, fr->sp); |
+ DCHECK_GE(kMaxInt, fr->llimit()); |
+ return InterpretedFrame(fr->code->function, static_cast<int>(fr->ret_pc), |
+ static_cast<int>(fr->sp), |
+ static_cast<int>(fr->llimit())); |
} |
virtual WasmVal GetReturnValue(int index) { |
@@ -1837,29 +1846,6 @@ WasmInterpreter::Thread* WasmInterpreter::GetThread(int id) { |
return internals_->threads_[id]; |
} |
-WasmVal WasmInterpreter::GetLocalVal(const WasmFrame* frame, int index) { |
- CHECK_GE(index, 0); |
- UNIMPLEMENTED(); |
- WasmVal none; |
- none.type = kWasmStmt; |
- return none; |
-} |
- |
-WasmVal WasmInterpreter::GetExprVal(const WasmFrame* frame, int pc) { |
- UNIMPLEMENTED(); |
- WasmVal none; |
- none.type = kWasmStmt; |
- return none; |
-} |
- |
-void WasmInterpreter::SetLocalVal(WasmFrame* frame, int index, WasmVal val) { |
- UNIMPLEMENTED(); |
-} |
- |
-void WasmInterpreter::SetExprVal(WasmFrame* frame, int pc, WasmVal val) { |
- UNIMPLEMENTED(); |
-} |
- |
size_t WasmInterpreter::GetMemorySize() { |
return internals_->instance_->mem_size; |
} |
@@ -1889,6 +1875,33 @@ ControlTransferMap WasmInterpreter::ComputeControlTransfersForTesting( |
return targets.map_; |
} |
+//============================================================================ |
+// Implementation of the frame inspection interface. |
+//============================================================================ |
+int InterpretedFrame::GetParameterCount() const { |
+ UNIMPLEMENTED(); |
+ return 0; |
+} |
+ |
+WasmVal InterpretedFrame::GetLocalVal(int index) const { |
+ CHECK_GE(index, 0); |
+ UNIMPLEMENTED(); |
+ WasmVal none; |
+ none.type = kWasmStmt; |
+ return none; |
+} |
+ |
+WasmVal InterpretedFrame::GetExprVal(int pc) const { |
+ UNIMPLEMENTED(); |
+ WasmVal none; |
+ none.type = kWasmStmt; |
+ return none; |
+} |
+ |
+void InterpretedFrame::SetLocalVal(int index, WasmVal val) { UNIMPLEMENTED(); } |
+ |
+void InterpretedFrame::SetExprVal(int pc, WasmVal val) { UNIMPLEMENTED(); } |
+ |
} // namespace wasm |
} // namespace internal |
} // namespace v8 |