Clean up duplicated opened existential archetype handling in SIL and more #81142
+150
−174
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
I noticed that SIL had three copy and pasted implementations of the algorithm for replacing opened existential archetypes with concrete types. This optimization comes up if inlining produces an existential value formed from a concrete type which is then immediately opened; we can eliminate the existential archetype in that case. However, this bit of copy and paste predated the introduction of generalized existentials, so it did not handle member types at all. This is a potential landmine if it ends up being used in more places in SIL.
This PR factors out one of the duplicate copies into a new "official"
ReplaceExistentialArchetypesWithConcreteTypes
, analogous to the transformer used for opaque archetypes. The new version is more complicated but it handles existential archetypes in full generality now. The other duplicate copy was a special case of an existing utility inSILCloner
, and the third one was dead.