Index: src/frames.cc |
diff --git a/src/frames.cc b/src/frames.cc |
index 50a2e21a055d7a9d8f11442f6cfa024d555c71dc..173b67c355097281ffb9ef34dea513f0649168b8 100644 |
--- a/src/frames.cc |
+++ b/src/frames.cc |
@@ -137,10 +137,17 @@ StackFrame* StackFrameIteratorBase::SingletonFor(StackFrame::Type type) { |
// ------------------------------------------------------------------------- |
+void VisibleFrameIterator::Advance() { |
+ do { |
+ iterator_.Advance(); |
+ } while (!iterator_.done() && !iterator_.frame()->is_visible()); |
+} |
+ |
+// ------------------------------------------------------------------------- |
-JavaScriptFrameIterator::JavaScriptFrameIterator( |
- Isolate* isolate, StackFrame::Id id) |
- : iterator_(isolate) { |
+JavaScriptFrameIterator::JavaScriptFrameIterator(Isolate* isolate, |
+ StackFrame::Id id) |
+ : VisibleFrameIterator(isolate) { |
while (!done()) { |
Advance(); |
if (frame()->id() == id) return; |
@@ -446,7 +453,7 @@ StackFrame::Type StackFrame::ComputeType(const StackFrameIteratorBase* iterator, |
case Code::OPTIMIZED_FUNCTION: |
return OPTIMIZED; |
case Code::WASM_FUNCTION: |
- return STUB; |
+ return WASM; |
case Code::BUILTIN: |
if (!marker->IsSmi()) { |
if (StandardFrame::IsArgumentsAdaptorFrame(state->fp)) { |
@@ -1222,6 +1229,32 @@ void StackFrame::PrintIndex(StringStream* accumulator, |
accumulator->Add((mode == OVERVIEW) ? "%5d: " : "[%d]: ", index); |
} |
+void WasmFrame::Print(StringStream* accumulator, PrintMode mode, |
+ int index) const {} |
+ |
+Code* WasmFrame::unchecked_code() const { |
+ return static_cast<Code*>(isolate()->FindCodeObject(pc())); |
+} |
+ |
+void WasmFrame::Iterate(ObjectVisitor* v) const { IterateCompiledFrame(v); } |
+ |
+void WasmFrame::Summarize(List<FrameSummary>* frames) { |
+ DCHECK(frames->length() == 0); |
+ // TODO(jfb) Do something useful. |
+ Object* object = Object::cast(*Handle<Object>::null()); |
+ JSFunction* jsfunction = JSFunction::cast(*Handle<JSFunction>::null()); |
+ Code* code = LookupCode(); |
+ DCHECK(code->is_wasm_code()); |
+ unsigned code_offset = 0; |
+ bool is_constructor = false; |
+ FrameSummary summary(object, jsfunction, AbstractCode::cast(code), |
+ code_offset, is_constructor); |
+ frames->Add(summary); |
+} |
+ |
+Address WasmFrame::GetCallerStackPointer() const { |
+ return fp() + ExitFrameConstants::kCallerSPDisplacement; |
+} |
namespace { |