Propagate Debugging Identifiers through Lambda #3942
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 PR propagates identifiers for debugging (of type
debug_uid = Shape.Uid.t
) from the typed tree representation through the Lambda IR. It is based largely on #1912, but already addresses the comments mentioned in that PR. It is also substantially smaller, because the propagation stops after the Lambda IR.The intended semantics of the debugging identifiers is as follows:
Lambda.debug_uid_none
.In general, it is fine to duplicate a
debug_uid
in Lambda or lower (contrary to what the name indicates), since for debugging information it is only important that we can map the lower level representations to the source variables that they correspond to (and their types). Moreover, I did not take much care to find the correct debugging identifiers for modules and classes. I left several comments in places where it seems like we could provide additional debugging identifiers, but it's not clear to me that it is worth it in these cases.Suggestions for reviewing. The easiest way to review this PR is probably by following the flow of the compiler with one exception: it probably makes sense to take a look at the changes in
lambda.mli
first to see which Lambda constructs will get a debugging identifier.