void StackIterator::Frame::print(int indentLevel) { int i = indentLevel; if (!this->callFrame()) { printif(i, "frame 0x0\n"); return; } CodeBlock* codeBlock = this->codeBlock(); printif(i, "frame %p {\n", this->callFrame()); CallFrame* callFrame = m_callFrame; CallFrame* callerFrame = this->callerFrame(); void* returnPC = callFrame->hasReturnPC() ? callFrame->returnPC().value() : 0; printif(i, " name '%s'\n", functionName().utf8().data()); printif(i, " sourceURL '%s'\n", sourceURL().utf8().data()); printif(i, " hostFlag %d\n", callerFrame->hasHostCallFrameFlag()); #if ENABLE(DFG_JIT) printif(i, " isInlinedFrame %d\n", isInlinedFrame()); if (isInlinedFrame()) printif(i, " InlineCallFrame %p\n", m_inlineCallFrame); #endif printif(i, " callee %p\n", callee()); printif(i, " returnPC %p\n", returnPC); printif(i, " callerFrame %p\n", callerFrame->removeHostCallFrameFlag()); unsigned locationRawBits = callFrame->locationAsRawBits(); printif(i, " rawLocationBits %u 0x%x\n", locationRawBits, locationRawBits); printif(i, " codeBlock %p\n", codeBlock); if (codeBlock) { JITCode::JITType jitType = codeBlock->jitType(); if (callFrame->hasLocationAsBytecodeOffset()) { unsigned bytecodeOffset = callFrame->locationAsBytecodeOffset(); printif(i, " bytecodeOffset %u %p / %zu\n", bytecodeOffset, reinterpret_cast<void*>(bytecodeOffset), codeBlock->instructions().size()); #if ENABLE(DFG_JIT) } else { unsigned codeOriginIndex = callFrame->locationAsCodeOriginIndex(); printif(i, " codeOriginIdex %u %p / %zu\n", codeOriginIndex, reinterpret_cast<void*>(codeOriginIndex), codeBlock->codeOrigins().size()); #endif } unsigned line = 0; unsigned column = 0; computeLineAndColumn(line, column); printif(i, " line %d\n", line); printif(i, " column %d\n", column); printif(i, " jitType %d <%s> isOptimizingJIT %d\n", jitType, jitTypeName(jitType), JITCode::isOptimizingJIT(jitType)); #if ENABLE(DFG_JIT) printif(i, " hasCodeOrigins %d\n", codeBlock->hasCodeOrigins()); if (codeBlock->hasCodeOrigins()) { JITCode* jitCode = codeBlock->jitCode().get(); printif(i, " jitCode %p start %p end %p\n", jitCode, jitCode->start(), jitCode->end()); } #endif } printif(i, "}\n"); }