Optimize isSameType for invariant applied types with the same structure #15556
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.
Comparing two deeply applied types with the same structure uses recursive isSameType tests if the types are
invariant. Each of these gets translated to two isSubType tests which can lead to exponential blowup relative to the type's
nesting depth. This problem does not occur if the two types are
eq
. But two types might still be structurally equal modulo dealiasing.We now cache isSameType successes after a certain nesting level to avoid recomputation.
Fixes #15525.
Reclassifies #15365 as a pos test