AST: Use a single kind K"op=" for updating assignments
#530
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.
Make all updating assignment operators like
+=be represented with a singleK"op="head, with the operator itself in infix position. For example,x += 1is now parsed asThis greatly reduces the number of distinct forms here from a rather big list (
$=%=&=*=+=-=//=/=<<=>>=>>>=\=^=|=÷=⊻=) and makes the operator itself appear in the AST as kindK"Identifier", as it should. It also makes it possible to add further unicode updating operators while keeping the AST stable.The need for this was highlighted when working on JuliaLowering. When using
K"+="as a head, one needs to look up the appropriate operator from the list of updating operators or use string munging on the Kind itself. This is quite awkward especially as it needs special rules for inferring the macro scope of the+identifier. In addition, having a single head for this form means update operator semantics only need to be dealt with in one place.