Ejemplo n.º 1
0
	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++;
		}
	}