Eliminate Reusing Mutable Terms #317
Draft
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.
The current compiler assumes that all
Term
are immutable and is reusing them. This assumption is wrong because of the resolution stage. This PR tries to fix the places where terms are reused.See also #297 (comment).
AFAIK there are still two places where terms are reused and I couldn't fix them.
During UCS desurgaring, the desugarer reuses the
fallback
split (e.g., inhkmc2/shared/src/test/mlscript/ucs/syntax/PlainConditionals.mls
).Both
Desugarer
andNormalization
share the same super classDesugaringBase
. However, desugaring happens before resolution and normalization happens after resolution, so the helper functions thatDesugarer
uses should not initialize the implicit arguments when it creates new terms; while the helper functions thatNormalization
uses should initialize the implicit arguments. Unfortunately they use a same set of helper functions :-( Errors underhkmc2/shared/src/test/mlscript/rp
are because of this).