Fix empty return with named results #120
Merged
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.
When a function has named results and uses empty return, the named result would correctly be renamed and hoisted into the frame struct. In that scenario, using an explicit return (such as "return myvalue") works, because the renaming pass goes over the expression in the return statement and replaces the named result with a selector into the frame struct.
However, when using an empty return (just "return"), the named result is not in the AST, and the renaming pass would not see it.
This patch add and final pass to the renaming procedure to change empty returns in functions with named results into explicit returns using selectors into the frame struct. For example:
gets rewritten into:
(other transformations omitted for this example)