+class LineAndColumnFunctor {
+public:
+ StackVisitor::Status operator()(StackVisitor& visitor)
+ {
+ visitor->computeLineAndColumn(m_line, m_column);
+ return StackVisitor::Done;
+ }
+
+ unsigned line() const { return m_line; }
+ unsigned column() const { return m_column; }
+
+private:
+ unsigned m_line;
+ unsigned m_column;
+};
+
+class FindCallerMidStackFunctor {
+public:
+ FindCallerMidStackFunctor(CallFrame* callFrame)
+ : m_callFrame(callFrame)
+ , m_callerFrame(nullptr)
+ { }
+
+ StackVisitor::Status operator()(StackVisitor& visitor)
+ {
+ if (visitor->callFrame() == m_callFrame) {
+ m_callerFrame = visitor->callerFrame();
+ return StackVisitor::Done;
+ }
+ return StackVisitor::Continue;
+ }
+
+ CallFrame* getCallerFrame() const { return m_callerFrame; }
+
+private:
+ CallFrame* m_callFrame;
+ CallFrame* m_callerFrame;
+};
+
+DebuggerCallFrame::DebuggerCallFrame(CallFrame* callFrame)
+ : m_callFrame(callFrame)