示例#1
0
void
IdentifierInfo::DoInsnLookup(const Arch& arch,
                             SourceLocation source,
                             DiagnosticsEngine& diags)
{
    if (m_flags & DID_INSN_LOOKUP)
        return;
    ++num_insn_lookup;
    m_flags &= ~(IS_INSN | IS_PREFIX);
    Arch::InsnPrefix ip = arch.ParseCheckInsnPrefix(getName(), source, diags);
    switch (ip.getType())
    {
        case Arch::InsnPrefix::INSN:
            ++num_insn_lookup_insn;
            m_insn = const_cast<Arch::InsnInfo*>(ip.getInsn());
            m_flags |= IS_INSN;
            break;
        case Arch::InsnPrefix::PREFIX:
            ++num_insn_lookup_prefix;
            m_insn = const_cast<Prefix*>(ip.getPrefix());
            m_flags |= IS_PREFIX;
            break;
        default:
            ++num_insn_lookup_none;
            break;
    }
    m_flags |= DID_INSN_LOOKUP;
}