本文整理汇总了C++中LocalStateHook::dropLocalRefsInnerTypes方法的典型用法代码示例。如果您正苦于以下问题:C++ LocalStateHook::dropLocalRefsInnerTypes方法的具体用法?C++ LocalStateHook::dropLocalRefsInnerTypes怎么用?C++ LocalStateHook::dropLocalRefsInnerTypes使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类LocalStateHook
的用法示例。
在下文中一共展示了LocalStateHook::dropLocalRefsInnerTypes方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: local_effects
//.........这里部分代码省略.........
(inst->is(Call) && inst->extra<Call>()->destroyLocals);
hook.killLocalsForCall(callDestroysLocals);
}
break;
case StRef:
hook.updateLocalRefPredictions(inst->src(0), inst->src(1));
break;
case StLocNT:
case StLoc:
hook.setLocalValue(inst->extra<LocalId>()->locId, inst->src(1));
break;
case LdLoc:
hook.setLocalValue(inst->extra<LdLoc>()->locId, inst->dst());
break;
case StLocPseudoMain:
hook.predictLocalType(inst->extra<LocalId>()->locId,
inst->src(1)->type());
break;
case AssertLoc:
case GuardLoc:
case CheckLoc: {
auto id = inst->extra<LocalId>()->locId;
if (inst->marker().func()->isPseudoMain()) {
hook.predictLocalType(id, inst->typeParam());
} else {
hook.refineLocalType(id,
inst->typeParam(),
TypeSource::makeGuard(inst));
}
break;
}
case HintLocInner:
hook.setBoxedLocalPrediction(inst->extra<HintLocInner>()->locId,
inst->typeParam());
break;
case CheckType:
case AssertType:
hook.refineLocalValues(inst->src(0), inst->dst());
break;
case IterInitK:
case WIterInitK:
// kill the locals to which this instruction stores iter's key and value
killIterLocals({inst->extra<IterData>()->keyId,
inst->extra<IterData>()->valId});
break;
case IterInit:
case WIterInit:
// kill the local to which this instruction stores iter's value
killIterLocals({inst->extra<IterData>()->valId});
break;
case IterNextK:
case WIterNextK:
// kill the locals to which this instruction stores iter's key and value
killIterLocals({inst->extra<IterData>()->keyId,
inst->extra<IterData>()->valId});
break;
case IterNext:
case WIterNext:
// kill the local to which this instruction stores iter's value
killIterLocals({inst->extra<IterData>()->valId});
break;
case InterpOne:
case InterpOneCF: {
auto const& id = *inst->extra<InterpOneData>();
assert(!id.smashesAllLocals || id.nChangedLocals == 0);
if (id.smashesAllLocals || inst->marker().func()->isPseudoMain()) {
hook.clearLocals();
} else {
auto it = id.changedLocals;
auto const end = it + id.nChangedLocals;
for (; it != end; ++it) {
auto& loc = *it;
// If changing the inner type of a boxed local, also drop the
// information about inner types for any other boxed locals.
if (loc.type.isBoxed()) hook.dropLocalRefsInnerTypes();
hook.setLocalType(loc.id, loc.type);
}
}
break;
}
default:
break;
}
if (MInstrEffects::supported(inst)) {
MInstrEffects::get(inst, frameState, hook);
}
}