本文整理汇总了C++中CallFrame::callSiteAsRawBits方法的典型用法代码示例。如果您正苦于以下问题:C++ CallFrame::callSiteAsRawBits方法的具体用法?C++ CallFrame::callSiteAsRawBits怎么用?C++ CallFrame::callSiteAsRawBits使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类CallFrame
的用法示例。
在下文中一共展示了CallFrame::callSiteAsRawBits方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: prefix
void StackVisitor::Frame::dump(PrintStream& out, Indenter indent, WTF::Function<void(PrintStream&)> prefix) const
{
if (!this->callFrame()) {
out.print(indent, "frame 0x0\n");
return;
}
CodeBlock* codeBlock = this->codeBlock();
out.print(indent);
prefix(out);
out.print("frame ", RawPointer(this->callFrame()), " {\n");
{
indent++;
CallFrame* callFrame = m_callFrame;
CallFrame* callerFrame = this->callerFrame();
const void* returnPC = callFrame->hasReturnPC() ? callFrame->returnPC().value() : nullptr;
out.print(indent, "name: ", functionName(), "\n");
out.print(indent, "sourceURL: ", sourceURL(), "\n");
bool isInlined = false;
#if ENABLE(DFG_JIT)
isInlined = isInlinedFrame();
out.print(indent, "isInlinedFrame: ", isInlinedFrame(), "\n");
if (isInlinedFrame())
out.print(indent, "InlineCallFrame: ", RawPointer(m_inlineCallFrame), "\n");
#endif
out.print(indent, "callee: ", RawPointer(callee().rawPtr()), "\n");
out.print(indent, "returnPC: ", RawPointer(returnPC), "\n");
out.print(indent, "callerFrame: ", RawPointer(callerFrame), "\n");
uintptr_t locationRawBits = callFrame->callSiteAsRawBits();
out.print(indent, "rawLocationBits: ", locationRawBits,
" ", RawPointer(reinterpret_cast<void*>(locationRawBits)), "\n");
out.print(indent, "codeBlock: ", RawPointer(codeBlock));
if (codeBlock)
out.print(" ", *codeBlock);
out.print("\n");
if (codeBlock && !isInlined) {
indent++;
if (callFrame->callSiteBitsAreBytecodeOffset()) {
unsigned bytecodeOffset = callFrame->bytecodeOffset();
out.print(indent, "bytecodeOffset: ", bytecodeOffset, " of ", codeBlock->instructions().size(), "\n");
#if ENABLE(DFG_JIT)
} else {
out.print(indent, "hasCodeOrigins: ", codeBlock->hasCodeOrigins(), "\n");
if (codeBlock->hasCodeOrigins()) {
CallSiteIndex callSiteIndex = callFrame->callSiteIndex();
out.print(indent, "callSiteIndex: ", callSiteIndex.bits(), " of ", codeBlock->codeOrigins().size(), "\n");
JITCode::JITType jitType = codeBlock->jitType();
if (jitType != JITCode::FTLJIT) {
JITCode* jitCode = codeBlock->jitCode().get();
out.print(indent, "jitCode: ", RawPointer(jitCode),
" start ", RawPointer(jitCode->start()),
" end ", RawPointer(jitCode->end()), "\n");
}
}
#endif
}
unsigned line = 0;
unsigned column = 0;
computeLineAndColumn(line, column);
out.print(indent, "line: ", line, "\n");
out.print(indent, "column: ", column, "\n");
indent--;
}
out.print(indent, "EntryFrame: ", RawPointer(m_entryFrame), "\n");
indent--;
}
out.print(indent, "}\n");
}
示例2: log
void StackVisitor::Frame::print(int indent)
{
if (!this->callFrame()) {
log(indent, "frame 0x0\n");
return;
}
CodeBlock* codeBlock = this->codeBlock();
logF(indent, "frame %p {\n", this->callFrame());
{
indent++;
CallFrame* callFrame = m_callFrame;
CallFrame* callerFrame = this->callerFrame();
void* returnPC = callFrame->hasReturnPC() ? callFrame->returnPC().value() : nullptr;
log(indent, "name: ", functionName(), "\n");
log(indent, "sourceURL: ", sourceURL(), "\n");
bool isInlined = false;
#if ENABLE(DFG_JIT)
isInlined = isInlinedFrame();
log(indent, "isInlinedFrame: ", isInlinedFrame(), "\n");
if (isInlinedFrame())
logF(indent, "InlineCallFrame: %p\n", m_inlineCallFrame);
#endif
logF(indent, "callee: %p\n", callee());
logF(indent, "returnPC: %p\n", returnPC);
logF(indent, "callerFrame: %p\n", callerFrame);
unsigned locationRawBits = callFrame->callSiteAsRawBits();
logF(indent, "rawLocationBits: %u 0x%x\n", locationRawBits, locationRawBits);
logF(indent, "codeBlock: %p ", codeBlock);
if (codeBlock)
dataLog(*codeBlock);
dataLog("\n");
if (codeBlock && !isInlined) {
indent++;
if (callFrame->callSiteBitsAreBytecodeOffset()) {
unsigned bytecodeOffset = callFrame->bytecodeOffset();
log(indent, "bytecodeOffset: ", bytecodeOffset, " of ", codeBlock->instructions().size(), "\n");
#if ENABLE(DFG_JIT)
} else {
log(indent, "hasCodeOrigins: ", codeBlock->hasCodeOrigins(), "\n");
if (codeBlock->hasCodeOrigins()) {
CallSiteIndex callSiteIndex = callFrame->callSiteIndex();
log(indent, "callSiteIndex: ", callSiteIndex.bits(), " of ", codeBlock->codeOrigins().size(), "\n");
JITCode::JITType jitType = codeBlock->jitType();
if (jitType != JITCode::FTLJIT) {
JITCode* jitCode = codeBlock->jitCode().get();
logF(indent, "jitCode: %p start %p end %p\n", jitCode, jitCode->start(), jitCode->end());
}
}
#endif
}
unsigned line = 0;
unsigned column = 0;
computeLineAndColumn(line, column);
log(indent, "line: ", line, "\n");
log(indent, "column: ", column, "\n");
indent--;
}
indent--;
}
log(indent, "}\n");
}