mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-09-29 06:15:01 +01:00
Explicitly run `RequireCompleteType` for an impl's facet type constraint in two places: - For a new `Impl` declaration that is `extend` - At the start of the `Impl` definition Stop trying to RequireCompleteType in the definition when constructing the witness. If we have a rewrite of a name in `.Self`, then we can construct a full witness, otherwise we defer to the definition. Now GetOrAddImpl does not need to track `is_definition` anymore, so we remove a lot of plumbing. We inline the `AllocateFacetTypeImplWitness` since it has a single caller and it is just 2 lines, to help improve understanding of the steps and comments in setting up the impl definition. Note that this puts the `RequreCompleteType` instruction into the definition's generic eval block always, avoiding the issue of ensuring that each generic redecl has the exact same instructions, and forcing coordination to have `RequireCompleteType` inserted into every declaration's eval block or none. The result also more closely matches the design, with the complete type not being required until inside the definition. This is part of #6420 which is being split up into a chain of smaller PRs. It is based on #6469.