Fix #401: Avoid asSeenFrom for types/bounds that don't depend on the prefix. #404
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.
This mostly acts as a fast path. However, for the particular case of static recursive match types, it more critically cuts some infinite recursion.
Normally, when a match type refers to itself, it would do so through a
ThisType
. ComputingasSeenFrom
for aThisType
prefix already cuts the infinite recursion because it is, by construction, a no-op.However, for static recursive match types, the compiler makes them refer to themselves through their public, static prefix. This caused the infinite recursion observed in #401.
To avoid the issue, we use another shortcut to
asSeenFrom
: if the type we map over does not contain anyThisType
, we also know it will be a no-op. We store that as a lazy valisPrefixDependent
ofTermSymbol
andTypeMemberSymbol
, so that they can take a short cut in{type,bounds}AsSeenFrom
.