mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-05 16:11:06 +01:00
Support unqualified lookup into extended interfaces from classes and impls (#7217)
When a class extends an interface, referring to a member name of the interface as an unqualified name should refer to the class's corresponding associated entity value, not to the associated entity itself. Similarly, in an `impl`, unqualified names of associated entities should refer to the `impl`'s corresponding value for that entity. To support this, we treat `impl`s as `extend`ing their implemented facet type, and we make lookups into an extended facet type use the `Self` type of the extending `impl` or `class` if lookup finds an associated entity. We already did the latter if the extending entity was an interface; this extends the existing support for these other cases.
This commit is contained in:
@@ -389,7 +389,8 @@ auto EvalConstantInst(Context& context, SemIR::InstId inst_id,
|
||||
auto index = static_cast<size_t>(inst.index.index);
|
||||
CARBON_CHECK(index < elements.size(), "Access out of bounds.");
|
||||
auto element = elements[index];
|
||||
if (element.has_value()) {
|
||||
if (element.has_value() &&
|
||||
element != SemIR::InstId::ImplWitnessTablePlaceholder) {
|
||||
LoadImportRef(context, element);
|
||||
return ConstantEvalResult::Existing(GetConstantValueInSpecific(
|
||||
context.sem_ir(), witness.specific_id, element));
|
||||
|
||||
Reference in New Issue
Block a user