-
Notifications
You must be signed in to change notification settings - Fork 10.5k
[AST] Clean up handling of single-expression closures #32200
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
DougGregor
merged 9 commits into
swiftlang:master
from
DougGregor:single-expression-closure-cleanup
Jun 6, 2020
Merged
[AST] Clean up handling of single-expression closures #32200
DougGregor
merged 9 commits into
swiftlang:master
from
DougGregor:single-expression-closure-cleanup
Jun 6, 2020
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Single-expression closures have always been traversed differently from multi-statement closures. The former were traversed as if the expression was their only child, skipping the BraceStmt and implicit return, while the later was traversed as a normal BraceStmt. Unify on the latter treatment, so that traversal There are a few places where we unintentionally relied on this expression-as-child behavior. Clean those up to work with arbitrary closures, which is an overall simplification in the logic.
There are no longer any clients of the "has applied function builder" bit in ClosureExpr, so remove it.
Reverse the polarity of the "checked in context" bit for ClosureExpr to "separately checked", which simplifies the AST walker logic (to "should we walk separately type-checked closure bodies?") and eliminates single-expression closures as a separate case to consider.
@swift-ci smoke test |
@swift-ci please test source compatibility |
xedin
reviewed
Jun 5, 2020
@swift-ci please smoke test |
@swift-ci please test source compatibility |
@swift-ci smoke test macOS |
xedin
approved these changes
Jun 5, 2020
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Stop treating single-expression closures as special throughout most of the compiler, with the exception of the constraint solver where the semantics are intentionally different. This eliminates a bit of special-case code and paves the way toward experimental support for multi-statement closures checked within their enclosing expressions.