mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-11-15 21:58:09 +00:00
The rules in early impls are stored with frozen `.Self`. However when forming a specific, we can perform an impl lookup query against a facet type written outside of the current facet type, which means any `.Self` in that facet type will _not_ be frozen. In order to compare a witness from early impls with the non-frozen requirement, we need to thaw what we get out of the early impls. However there are also cases where we are doing a lookup against requirements that are part of the current facet type, so the requirements are frozen. Rather than picking one, and having to thaw all impl lookup queries, for example, we store the frozen and thawed copy of the early impls rule so that we can satisfy lookup queries that involve either.