Improve TreeTransform for positional parameter expressions. #576
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.
In TreeTransform.h, track the transformed types for parameters. Use
this information to update the types for positional parameter expressions.
This fixes issue #484, which was a typechecking error caused by different types
for uses of parameters in bounds expressions in function types.
The tracking is straightforward: we add a vector of types for parameters.
Positional parameters only occur in bounds expressions in types. When
we transform a function prototype type, we record the transformed types for
parameters before transforming the bounds expressions in the types.
This change also contains a few clean up changes:
had some code that is flagged as specific to template instantiation. It
was mostly code for marking uses. The code in turn called into code that
checked for detecting references to local variables defined in other lexical
contexts (for example, block scopes). Those checks depend on the lexical context
state for Sema. We don't want any of this code running for the kinds
of transforms that we are doing, so I added a new method to TreeTransform.h that
can be overridden to suppress this code.
as const and changing the order of parameters to group related parameters
together.
Testing: