本文整理汇总了C++中FuncEmitter::addEHEnt方法的典型用法代码示例。如果您正苦于以下问题:C++ FuncEmitter::addEHEnt方法的具体用法?C++ FuncEmitter::addEHEnt怎么用?C++ FuncEmitter::addEHEnt使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类FuncEmitter
的用法示例。
在下文中一共展示了FuncEmitter::addEHEnt方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: emit_eh_region
void emit_eh_region(FuncEmitter& fe,
borrowed_ptr<const EHRegion> region,
const BlockInfo& blockInfo,
ParentIndexMap& parentIndexMap) {
// A region on a single empty block.
if (region->start == region->past) return;
auto& eh = fe.addEHEnt();
eh.m_base = region->start;
eh.m_past = region->past;
assert(eh.m_past >= eh.m_base);
assert(eh.m_base != kInvalidOffset && eh.m_past != kInvalidOffset);
if (region->parent) {
auto parentIt = parentIndexMap.find(region->parent);
assert(parentIt != end(parentIndexMap));
eh.m_parentIndex = parentIt->second;
} else {
eh.m_parentIndex = -1;
}
parentIndexMap[region] = fe.ehtab.size() - 1;
match<void>(
region->node->info,
[&] (const php::TryRegion& tr) {
eh.m_type = EHEnt::Type::Catch;
for (auto& c : tr.catches) {
eh.m_catches.emplace_back(
fe.ue().mergeLitstr(c.first),
blockInfo[c.second->id].offset
);
}
eh.m_fault = kInvalidOffset;
eh.m_iterId = -1;
eh.m_itRef = false;
},
[&] (const php::FaultRegion& fr) {
eh.m_type = EHEnt::Type::Fault;
eh.m_fault = blockInfo[fr.faultEntry->id].offset;
eh.m_iterId = fr.iterId;
eh.m_itRef = fr.itRef;
}
);
}