From 4fd273a928a0edfa7b281a2e38e8e4eeb7ce0768 Mon Sep 17 00:00:00 2001 From: josh11b <15258583+josh11b@users.noreply.github.com> Date: Mon, 3 Mar 2025 15:11:38 -0800 Subject: [PATCH] 2 small simplifications in member access (#5055) * `IsInstanceMethod` can look in the function's `self_param_id` instead of iterating through all of the implicit parameter patterns. * An associated entity is always associated with a single interface, so we don't need to handle the case when it isn't. Co-authored-by: Josh L --- toolchain/check/member_access.cpp | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/toolchain/check/member_access.cpp b/toolchain/check/member_access.cpp index ed94ab4eef8b..901e4d8b7974 100644 --- a/toolchain/check/member_access.cpp +++ b/toolchain/check/member_access.cpp @@ -45,15 +45,7 @@ static auto GetClassElementIndex(Context& context, SemIR::InstId element_id) static auto IsInstanceMethod(const SemIR::File& sem_ir, SemIR::FunctionId function_id) -> bool { const auto& function = sem_ir.functions().Get(function_id); - for (auto param_id : - sem_ir.inst_blocks().GetOrEmpty(function.implicit_param_patterns_id)) { - if (SemIR::Function::GetNameFromPatternId(sem_ir, param_id) == - SemIR::NameId::SelfValue) { - return true; - } - } - - return false; + return function.self_param_id.has_value(); } // Returns the highest allowed access. For example, if this returns `Protected` @@ -187,13 +179,8 @@ static auto PerformImplLookup( MakeDiagnosticBuilderFn missing_impl_diagnoser = nullptr) -> SemIR::InstId { auto interface_type = GetInterfaceFromFacetType(context, assoc_type.interface_type_id); - if (!interface_type) { - context.TODO(loc_id, - "Lookup of impl witness not yet supported except for a single " - "interface"); - return SemIR::ErrorInst::SingletonInstId; - } - + // An associated entity is always associated with a single interface. + CARBON_CHECK(interface_type); auto self_type_id = context.types().GetTypeIdForTypeConstantId(type_const_id); auto witness_id = LookupImplWitness(context, loc_id, type_const_id,