CallFrame* CallFrame::trueCallerFrame() { // this -> The callee; this is either an inlined callee in which case it already has // a pointer to the true caller. Otherwise it contains current PC in the machine // caller. // // machineCaller -> The caller according to the machine, which may be zero or // more frames above the true caller due to inlining. // Am I an inline call frame? If so, we're done. if (isInlineCallFrame()) return callerFrame(); // I am a machine call frame, so the question is: is my caller a machine call frame // that has inlines or a machine call frame that doesn't? CallFrame* machineCaller = callerFrame()->removeHostCallFrameFlag(); if (!machineCaller) return 0; ASSERT(!machineCaller->isInlineCallFrame()); // Figure out how we want to get the current code location. if (hasHostCallFrameFlag() || returnAddressIsInCtiTrampoline(returnPC())) return machineCaller->trueCallFrameFromVMCode(); return machineCaller->trueCallFrame(returnPC()); }