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; }