diff --git a/toolchain/check/import_ref.cpp b/toolchain/check/import_ref.cpp index 4509bcb10f20..55ebad3c8430 100644 --- a/toolchain/check/import_ref.cpp +++ b/toolchain/check/import_ref.cpp @@ -312,18 +312,17 @@ class ImportRefResolver { if (!const_id.is_valid()) { return SemIR::NameScopeId::Invalid; } - switch (auto name_scope_inst = context_.insts().Get(const_id.inst_id()); - name_scope_inst.kind()) { - case SemIR::Namespace::Kind: - return name_scope_inst.As().name_scope_id; - case SemIR::ClassType::Kind: - return context_.classes() - .Get(name_scope_inst.As().class_id) - .scope_id; - case SemIR::InterfaceType::Kind: - return context_.interfaces() - .Get(name_scope_inst.As().interface_id) - .scope_id; + auto name_scope_inst = context_.insts().Get(const_id.inst_id()); + CARBON_KIND_SWITCH(name_scope_inst) { + case CARBON_KIND(SemIR::Namespace inst): { + return inst.name_scope_id; + } + case CARBON_KIND(SemIR::ClassType inst): { + return context_.classes().Get(inst.class_id).scope_id; + } + case CARBON_KIND(SemIR::InterfaceType inst): { + return context_.interfaces().Get(inst.interface_id).scope_id; + } default: if (const_id == SemIR::ConstantId::Error) { return SemIR::NameScopeId::Invalid; @@ -380,68 +379,67 @@ class ImportRefResolver { return {context_.constant_values().Get(inst_id)}; } - auto inst = import_ir_.insts().Get(inst_id); - - switch (inst.kind()) { - case SemIR::InstKind::AssociatedEntity: - return TryResolveTypedInst(inst.As()); - - case SemIR::InstKind::AssociatedEntityType: - return TryResolveTypedInst(inst.As()); - - case SemIR::InstKind::BaseDecl: - return TryResolveTypedInst(inst.As(), inst_id); - - case SemIR::InstKind::BindAlias: - return TryResolveTypedInst(inst.As()); - - case SemIR::InstKind::ClassDecl: - return TryResolveTypedInst(inst.As(), const_id); - - case SemIR::InstKind::ClassType: - return TryResolveTypedInst(inst.As()); - - case SemIR::InstKind::ConstType: - return TryResolveTypedInst(inst.As()); - - case SemIR::InstKind::FieldDecl: - return TryResolveTypedInst(inst.As(), inst_id); - - case SemIR::InstKind::FunctionDecl: - return TryResolveTypedInst(inst.As()); - - case SemIR::InstKind::InterfaceDecl: - return TryResolveTypedInst(inst.As(), const_id); - - case SemIR::InstKind::InterfaceWitness: - return TryResolveTypedInst(inst.As()); - - case SemIR::InstKind::InterfaceType: - return TryResolveTypedInst(inst.As()); - - case SemIR::InstKind::PointerType: - return TryResolveTypedInst(inst.As()); - - case SemIR::InstKind::StructType: - return TryResolveTypedInst(inst.As(), inst_id); - - case SemIR::InstKind::TupleType: - return TryResolveTypedInst(inst.As()); - - case SemIR::InstKind::UnboundElementType: - return TryResolveTypedInst(inst.As()); - - case SemIR::InstKind::BindName: + auto untyped_inst = import_ir_.insts().Get(inst_id); + CARBON_KIND_SWITCH(untyped_inst) { + case CARBON_KIND(SemIR::AssociatedEntity inst): { + return TryResolveTypedInst(inst); + } + case CARBON_KIND(SemIR::AssociatedEntityType inst): { + return TryResolveTypedInst(inst); + } + case CARBON_KIND(SemIR::BaseDecl inst): { + return TryResolveTypedInst(inst, inst_id); + } + case CARBON_KIND(SemIR::BindAlias inst): { + return TryResolveTypedInst(inst); + } + case CARBON_KIND(SemIR::BindName inst): { // TODO: This always returns `ConstantId::NotConstant`. return {TryEvalInst(context_, inst_id, inst)}; - - case SemIR::InstKind::BindSymbolicName: - return TryResolveTypedInst(inst.As(), inst_id); - + } + case CARBON_KIND(SemIR::BindSymbolicName inst): { + return TryResolveTypedInst(inst, inst_id); + } + case CARBON_KIND(SemIR::ClassDecl inst): { + return TryResolveTypedInst(inst, const_id); + } + case CARBON_KIND(SemIR::ClassType inst): { + return TryResolveTypedInst(inst); + } + case CARBON_KIND(SemIR::ConstType inst): { + return TryResolveTypedInst(inst); + } + case CARBON_KIND(SemIR::FieldDecl inst): { + return TryResolveTypedInst(inst, inst_id); + } + case CARBON_KIND(SemIR::FunctionDecl inst): { + return TryResolveTypedInst(inst); + } + case CARBON_KIND(SemIR::InterfaceDecl inst): { + return TryResolveTypedInst(inst, const_id); + } + case CARBON_KIND(SemIR::InterfaceWitness inst): { + return TryResolveTypedInst(inst); + } + case CARBON_KIND(SemIR::InterfaceType inst): { + return TryResolveTypedInst(inst); + } + case CARBON_KIND(SemIR::PointerType inst): { + return TryResolveTypedInst(inst); + } + case CARBON_KIND(SemIR::StructType inst): { + return TryResolveTypedInst(inst, inst_id); + } + case CARBON_KIND(SemIR::TupleType inst): { + return TryResolveTypedInst(inst); + } + case CARBON_KIND(SemIR::UnboundElementType inst): { + return TryResolveTypedInst(inst); + } default: context_.TODO( AddImportIRInst(inst_id), - llvm::formatv("TryResolveInst on {0}", inst.kind()).str()); + llvm::formatv("TryResolveInst on {0}", untyped_inst.kind()).str()); return {SemIR::ConstantId::Error}; } }