StackVisitor::StackVisitor(CallFrame* startFrame, VM* vm) { m_frame.m_index = 0; m_frame.m_isWasmFrame = false; CallFrame* topFrame; if (startFrame) { ASSERT(vm); ASSERT(!vm->topCallFrame || reinterpret_cast<void*>(vm->topCallFrame) != vm->topEntryFrame); m_frame.m_entryFrame = vm->topEntryFrame; topFrame = vm->topCallFrame; if (topFrame && topFrame->isStackOverflowFrame()) { topFrame = topFrame->callerFrame(m_frame.m_entryFrame); m_topEntryFrameIsEmpty = (m_frame.m_entryFrame != vm->topEntryFrame); if (startFrame == vm->topCallFrame) startFrame = topFrame; } } else { m_frame.m_entryFrame = 0; topFrame = 0; } m_frame.m_callerIsEntryFrame = false; readFrame(topFrame); // Find the frame the caller wants to start unwinding from. while (m_frame.callFrame() && m_frame.callFrame() != startFrame) gotoNextFrame(); }