本文整理汇总了C++中codeBlock函数的典型用法代码示例。如果您正苦于以下问题:C++ codeBlock函数的具体用法?C++ codeBlock怎么用?C++ codeBlock使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了codeBlock函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: ENABLE
Arguments* StackVisitor::Frame::existingArguments()
{
if (codeBlock()->codeType() != FunctionCode)
return 0;
if (!codeBlock()->usesArguments())
return 0;
VirtualRegister reg;
#if ENABLE(DFG_JIT)
if (isInlinedFrame())
reg = inlineCallFrame()->argumentsRegister;
else
#endif // ENABLE(DFG_JIT)
reg = codeBlock()->argumentsRegister();
// Care should be taken here since exception fuzzing may raise exceptions in
// places where they would be otherwise impossible. Therefore, callFrame may
// lack activation even if the codeBlock signals need of activation. Also,
// even if codeBlock signals the use of arguments, the
// unmodifiedArgumentsRegister may not be initialized yet (neither locally
// nor in lexicalEnvironment).
JSValue result = jsUndefined();
if (codeBlock()->needsActivation() && callFrame()->hasActivation())
result = callFrame()->lexicalEnvironment()->registerAt(unmodifiedArgumentsRegister(reg).offset()).get();
if (!result || !result.isCell()) // Try local unmodifiedArgumentsRegister if lexicalEnvironment is not present (generally possible) or has not set up registers yet (only possible if fuzzing exceptions).
result = callFrame()->r(unmodifiedArgumentsRegister(reg).offset()).jsValue();
if (!result || !result.isCell()) // Protect against the case when exception fuzzing throws when unmodifiedArgumentsRegister is not set up yet (e.g., in op_enter).
return 0;
return jsCast<Arguments*>(result);
}
开发者ID:houzhenggang,项目名称:webkit,代码行数:31,代码来源:StackVisitor.cpp
示例2: CodeOrigin
CodeOrigin CallFrame::codeOrigin()
{
if (!codeBlock())
return CodeOrigin(0);
#if ENABLE(DFG_JIT)
if (callSiteBitsAreCodeOriginIndex()) {
CallSiteIndex index = callSiteIndex();
ASSERT(codeBlock()->canGetCodeOrigin(index));
return codeBlock()->codeOrigin(index);
}
#endif
return CodeOrigin(callSiteBitsAsBytecodeOffset());
}
开发者ID:ollie314,项目名称:webkit,代码行数:13,代码来源:CallFrame.cpp
示例3: CodeOrigin
CodeOrigin CallFrame::codeOrigin()
{
if (!codeBlock())
return CodeOrigin(0);
#if ENABLE(DFG_JIT)
if (hasLocationAsCodeOriginIndex()) {
unsigned index = locationAsCodeOriginIndex();
ASSERT(codeBlock()->canGetCodeOrigin(index));
return codeBlock()->codeOrigin(index);
}
#endif
return CodeOrigin(locationAsBytecodeOffset());
}
开发者ID:AndriyKalashnykov,项目名称:webkit,代码行数:13,代码来源:CallFrame.cpp
示例4: codeBlock
CodeBlock* CallFrame::someCodeBlockForPossiblyInlinedCode()
{
if (!isInlineCallFrame())
return codeBlock();
return jsCast<FunctionExecutable*>(inlineCallFrame()->executable.get())->baselineCodeBlockFor(
inlineCallFrame()->isCall ? CodeForCall : CodeForConstruct);
}
开发者ID:dzhshf,项目名称:WebKit,代码行数:8,代码来源:CallFrame.cpp
示例5: isWithinPowerOfTwoForConstant
bool isWithinPowerOfTwoForConstant(Node* node)
{
JSValue immediateValue = node->valueOfJSConstant(codeBlock());
if (!immediateValue.isNumber())
return false;
double immediate = immediateValue.asNumber();
return immediate > -(static_cast<int64_t>(1) << power) && immediate < (static_cast<int64_t>(1) << power);
}
开发者ID:webOS-ports,项目名称:webkit,代码行数:8,代码来源:DFGBackwardsPropagationPhase.cpp
示例6: setStartOfCode
void JITCompiler::compile()
{
setStartOfCode();
compileEntry();
m_speculative = std::make_unique<SpeculativeJIT>(*this);
// Plant a check that sufficient space is available in the JSStack.
addPtr(TrustedImm32(virtualRegisterForLocal(m_graph.requiredRegisterCountForExecutionAndExit() - 1).offset() * sizeof(Register)), GPRInfo::callFrameRegister, GPRInfo::regT1);
Jump stackOverflow = branchPtr(Above, AbsoluteAddress(m_vm->addressOfStackLimit()), GPRInfo::regT1);
addPtr(TrustedImm32(m_graph.stackPointerOffset() * sizeof(Register)), GPRInfo::callFrameRegister, stackPointerRegister);
checkStackPointerAlignment();
compileSetupRegistersForEntry();
compileEntryExecutionFlag();
compileBody();
setEndOfMainPath();
// === Footer code generation ===
//
// Generate the stack overflow handling; if the stack check in the entry head fails,
// we need to call out to a helper function to throw the StackOverflowError.
stackOverflow.link(this);
emitStoreCodeOrigin(CodeOrigin(0));
if (maxFrameExtentForSlowPathCall)
addPtr(TrustedImm32(-maxFrameExtentForSlowPathCall), stackPointerRegister);
m_speculative->callOperationWithCallFrameRollbackOnException(operationThrowStackOverflowError, m_codeBlock);
// Generate slow path code.
m_speculative->runSlowPathGenerators(m_pcToCodeOriginMapBuilder);
m_pcToCodeOriginMapBuilder.appendItem(label(), PCToCodeOriginMapBuilder::defaultCodeOrigin());
compileExceptionHandlers();
linkOSRExits();
// Create OSR entry trampolines if necessary.
m_speculative->createOSREntries();
setEndOfCode();
auto linkBuffer = std::make_unique<LinkBuffer>(*m_vm, *this, m_codeBlock, JITCompilationCanFail);
if (linkBuffer->didFailToAllocate()) {
m_graph.m_plan.finalizer = std::make_unique<FailedFinalizer>(m_graph.m_plan);
return;
}
link(*linkBuffer);
m_speculative->linkOSREntries(*linkBuffer);
m_jitCode->shrinkToFit();
codeBlock()->shrinkToFit(CodeBlock::LateShrink);
disassemble(*linkBuffer);
m_graph.m_plan.finalizer = std::make_unique<JITFinalizer>(
m_graph.m_plan, m_jitCode.release(), WTFMove(linkBuffer));
}
开发者ID:icepy,项目名称:JavaScriptCore,代码行数:58,代码来源:DFGJITCompiler.cpp
示例7: ENABLE
unsigned CallFrame::bytecodeOffset()
{
if (!codeBlock())
return 0;
#if ENABLE(DFG_JIT)
if (callSiteBitsAreCodeOriginIndex()) {
ASSERT(codeBlock());
CodeOrigin codeOrigin = this->codeOrigin();
for (InlineCallFrame* inlineCallFrame = codeOrigin.inlineCallFrame; inlineCallFrame;) {
codeOrigin = inlineCallFrame->directCaller;
inlineCallFrame = codeOrigin.inlineCallFrame;
}
return codeOrigin.bytecodeIndex;
}
#endif
ASSERT(callSiteBitsAreBytecodeOffset());
return callSiteBitsAsBytecodeOffset();
}
开发者ID:ollie314,项目名称:webkit,代码行数:18,代码来源:CallFrame.cpp
示例8: ASSERT
bool CallFrame::callSiteBitsAreBytecodeOffset() const
{
ASSERT(codeBlock());
switch (codeBlock()->jitType()) {
case JITCode::InterpreterThunk:
case JITCode::BaselineJIT:
return true;
case JITCode::None:
case JITCode::HostCallThunk:
RELEASE_ASSERT_NOT_REACHED();
return false;
default:
return false;
}
RELEASE_ASSERT_NOT_REACHED();
return false;
}
开发者ID:ollie314,项目名称:webkit,代码行数:18,代码来源:CallFrame.cpp
示例9: run
bool run()
{
ASSERT(m_graph.m_form == ThreadedCPS);
ASSERT(m_graph.m_unificationState == GloballyUnified);
ASSERT(codeBlock()->numParameters() >= 1);
{
ConcurrentJSLocker locker(profiledBlock()->m_lock);
// We only do this for the arguments at the first block. The arguments from
// other entrypoints have already been populated with their predictions.
auto& arguments = m_graph.m_rootToArguments.find(m_graph.block(0))->value;
for (size_t arg = 0; arg < static_cast<size_t>(codeBlock()->numParameters()); ++arg) {
ValueProfile& profile = profiledBlock()->valueProfileForArgument(arg);
arguments[arg]->variableAccessData()->predict(
profile.computeUpdatedPrediction(locker));
}
}
for (BlockIndex blockIndex = 0; blockIndex < m_graph.numBlocks(); ++blockIndex) {
BasicBlock* block = m_graph.block(blockIndex);
if (!block)
continue;
if (!block->isOSRTarget)
continue;
if (block->bytecodeBegin != m_graph.m_plan.osrEntryBytecodeIndex())
continue;
const Operands<Optional<JSValue>>& mustHandleValues = m_graph.m_plan.mustHandleValues();
for (size_t i = 0; i < mustHandleValues.size(); ++i) {
int operand = mustHandleValues.operandForIndex(i);
Optional<JSValue> value = mustHandleValues[i];
if (!value)
continue;
Node* node = block->variablesAtHead.operand(operand);
if (!node)
continue;
ASSERT(node->accessesStack(m_graph));
node->variableAccessData()->predict(speculationFromValue(value.value()));
}
}
return true;
}
开发者ID:wolfviking0,项目名称:webcl-webkit,代码行数:44,代码来源:DFGPredictionInjectionPhase.cpp
示例10: getJSFunction
bool CallFrame::isInlineCallFrameSlow()
{
if (!callee())
return false;
JSCell* calleeAsFunctionCell = getJSFunction(callee());
if (!calleeAsFunctionCell)
return false;
JSFunction* calleeAsFunction = asFunction(calleeAsFunctionCell);
return calleeAsFunction->executable() != codeBlock()->ownerExecutable();
}
开发者ID:CannedFish,项目名称:deepin-webkit,代码行数:10,代码来源:CallFrame.cpp
示例11: bytecodeOffset
unsigned CallFrame::bytecodeOffset()
{
if (!codeBlock())
return 0;
#if ENABLE(DFG_JIT)
if (hasLocationAsCodeOriginIndex())
return bytecodeOffsetFromCodeOriginIndex();
#endif
return locationAsBytecodeOffset();
}
开发者ID:AndriyKalashnykov,项目名称:webkit,代码行数:10,代码来源:CallFrame.cpp
示例12: run
bool run()
{
ASSERT(m_graph.m_form == ThreadedCPS);
ASSERT(m_graph.m_unificationState == GloballyUnified);
ASSERT(codeBlock()->numParameters() >= 1);
for (size_t arg = 0; arg < static_cast<size_t>(codeBlock()->numParameters()); ++arg) {
ValueProfile* profile = profiledBlock()->valueProfileForArgument(arg);
if (!profile)
continue;
m_graph.m_arguments[arg]->variableAccessData()->predict(profile->computeUpdatedPrediction());
#if DFG_ENABLE(DEBUG_VERBOSE)
dataLog(
"Argument [", arg, "] prediction: ",
SpeculationDump(m_graph.m_arguments[arg]->variableAccessData()->prediction()), "\n");
#endif
}
for (BlockIndex blockIndex = 0; blockIndex < m_graph.m_blocks.size(); ++blockIndex) {
BasicBlock* block = m_graph.m_blocks[blockIndex].get();
if (!block)
continue;
if (!block->isOSRTarget)
continue;
if (block->bytecodeBegin != m_graph.m_osrEntryBytecodeIndex)
continue;
for (size_t i = 0; i < m_graph.m_mustHandleValues.size(); ++i) {
Node* node = block->variablesAtHead.operand(
m_graph.m_mustHandleValues.operandForIndex(i));
if (!node)
continue;
ASSERT(node->hasLocal());
node->variableAccessData()->predict(
speculationFromValue(m_graph.m_mustHandleValues[i]));
}
}
return true;
}
开发者ID:SchleunigerAG,项目名称:WinEC7_Qt5.3.1_Fixes,代码行数:41,代码来源:DFGPredictionInjectionPhase.cpp
示例13: switch
StackVisitor::Frame::CodeType StackVisitor::Frame::codeType() const
{
if (isWasmFrame())
return CodeType::Wasm;
if (!codeBlock())
return CodeType::Native;
switch (codeBlock()->codeType()) {
case EvalCode:
return CodeType::Eval;
case ModuleCode:
return CodeType::Module;
case FunctionCode:
return CodeType::Function;
case GlobalCode:
return CodeType::Global;
}
RELEASE_ASSERT_NOT_REACHED();
return CodeType::Global;
}
开发者ID:wolfviking0,项目名称:webcl-webkit,代码行数:21,代码来源:StackVisitor.cpp
示例14: ENABLE
Arguments* StackVisitor::Frame::existingArguments()
{
if (codeBlock()->codeType() != FunctionCode)
return 0;
if (!codeBlock()->usesArguments())
return 0;
VirtualRegister reg;
#if ENABLE(DFG_JIT)
if (isInlinedFrame())
reg = inlineCallFrame()->argumentsRegister;
else
#endif // ENABLE(DFG_JIT)
reg = codeBlock()->argumentsRegister();
JSValue result = callFrame()->r(unmodifiedArgumentsRegister(reg).offset()).jsValue();
if (!result || !result.isCell()) // Protect against Undefined in case we throw in op_enter.
return 0;
return jsCast<Arguments*>(result);
}
开发者ID:chenbk85,项目名称:webkit2-wincairo,代码行数:21,代码来源:StackVisitor.cpp
示例15: switch
StackIterator::Frame::CodeType StackIterator::Frame::codeType() const
{
if (!isJSFrame())
return StackIterator::Frame::Native;
switch (codeBlock()->codeType()) {
case EvalCode:
return StackIterator::Frame::Eval;
case FunctionCode:
return StackIterator::Frame::Function;
case GlobalCode:
return StackIterator::Frame::Global;
}
RELEASE_ASSERT_NOT_REACHED();
return StackIterator::Frame::Global;
}
开发者ID:webOS-ports,项目名称:webkit,代码行数:16,代码来源:StackIterator.cpp
示例16: switch
String StackVisitor::Frame::sourceURL()
{
String traceLine;
switch (codeType()) {
case CodeType::Eval:
case CodeType::Function:
case CodeType::Global: {
String sourceURL = codeBlock()->ownerExecutable()->sourceURL();
if (!sourceURL.isEmpty())
traceLine = sourceURL.impl();
break;
}
case CodeType::Native:
traceLine = ASCIILiteral("[native code]");
break;
}
return traceLine.isNull() ? emptyString() : traceLine;
}
开发者ID:houzhenggang,项目名称:webkit,代码行数:19,代码来源:StackVisitor.cpp
示例17: adoptPtr
void JITCompiler::link()
{
OwnPtr<LinkBuffer> linkBuffer = adoptPtr(new LinkBuffer(*m_vm, this, m_codeBlock, JITCompilationCanFail));
if (linkBuffer->didFailToAllocate()) {
m_graph.m_plan.finalizer = adoptPtr(new FailedFinalizer(m_graph.m_plan));
return;
}
link(*linkBuffer);
m_speculative->linkOSREntries(*linkBuffer);
m_jitCode->shrinkToFit();
codeBlock()->shrinkToFit(CodeBlock::LateShrink);
disassemble(*linkBuffer);
m_graph.m_plan.finalizer = adoptPtr(new JITFinalizer(
m_graph.m_plan, m_jitCode.release(), linkBuffer.release()));
}
开发者ID:webOS-ports,项目名称:webkit,代码行数:19,代码来源:DFGJITCompiler.cpp
示例18: adoptPtr
void JITCompiler::linkFunction()
{
// === Link ===
OwnPtr<LinkBuffer> linkBuffer = adoptPtr(new LinkBuffer(*m_vm, this, m_codeBlock, JITCompilationCanFail));
if (linkBuffer->didFailToAllocate()) {
m_graph.m_plan.finalizer = adoptPtr(new FailedFinalizer(m_graph.m_plan));
return;
}
link(*linkBuffer);
m_speculative->linkOSREntries(*linkBuffer);
m_jitCode->shrinkToFit();
codeBlock()->shrinkToFit(CodeBlock::LateShrink);
linkBuffer->link(m_callArityFixup, FunctionPtr((m_vm->getCTIStub(arityFixup)).code().executableAddress()));
disassemble(*linkBuffer);
m_graph.m_plan.finalizer = adoptPtr(new JITFinalizer(
m_graph.m_plan, m_jitCode.release(), linkBuffer.release(), m_arityCheck));
}
开发者ID:RobotsAndPencils,项目名称:JavaScriptCore-iOS,代码行数:21,代码来源:DFGJITCompiler.cpp
示例19: isWithinPowerOfTwo
bool isWithinPowerOfTwo(Node* node)
{
switch (node->op()) {
case JSConstant: {
return isWithinPowerOfTwoForConstant<power>(node);
}
case BitAnd: {
if (power > 31)
return true;
return isWithinPowerOfTwoNonRecursive<power>(node->child1().node())
|| isWithinPowerOfTwoNonRecursive<power>(node->child2().node());
}
case BitOr:
case BitXor:
case BitLShift:
case ValueToInt32: {
return power > 31;
}
case BitRShift:
case BitURShift: {
if (power > 31)
return true;
Node* shiftAmount = node->child2().node();
if (shiftAmount->op() != JSConstant)
return false;
JSValue immediateValue = shiftAmount->valueOfJSConstant(codeBlock());
if (!immediateValue.isInt32())
return false;
return immediateValue.asInt32() > 32 - power;
}
default:
return false;
}
}
开发者ID:webOS-ports,项目名称:webkit,代码行数:40,代码来源:DFGBackwardsPropagationPhase.cpp
示例20: setBytecodeOffsetForNonDFGCode
void CallFrame::setCurrentVPC(Instruction* vpc)
{
setBytecodeOffsetForNonDFGCode(vpc - codeBlock()->instructions().begin());
}
开发者ID:dzhshf,项目名称:WebKit,代码行数:4,代码来源:CallFrame.cpp
注:本文中的codeBlock函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论