void StackWalker::visitReferences(const StackFrame& stackFrame, VisitReferenceFn fn, VisitFrameFn frameFn) { if (frameFn) { frameFn(stackFrame); } //Visit the calling stack frame visitReferencesInFrame(stackFrame, fn); //Then all other stack frames auto topEntryPtr = mVMState.engine().callStack().top(); int topFuncIndex = 0; while (topEntryPtr > mVMState.engine().callStack().start()) { auto callEntry = *topEntryPtr; auto topFunc = callEntry.function; auto callPoint = callEntry.callPoint; auto callBasePtr = findBasePtr(stackFrame.basePtr(), 0, topFuncIndex); StackFrame callStackFrame(callBasePtr, topFunc, callPoint); if (frameFn) { frameFn(callStackFrame); } visitReferencesInFrame(callStackFrame, fn); topEntryPtr--; topFuncIndex++; } }