fix #9503 plus another proposal on comparison and iteration syntax #15524
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.
The first commit is a straightforward fix for #9503, always parsing
a<:b
as an expression with head<:
.This change inspired the second commit, which does two related things. First, 2-argument comparisons are parsed as calls. Previously, we parsed
a<b
as(comparison a < b)
, which I think is a quasi-bug since this can be handled as a simple function call and doesn't need chained comparison treatment.That led to looking at iteration syntax, which depends on the parsing of
a in b
. One problem here is that=
andin
have different precedence, so depending on which you used you could get different syntax errors. For examplefor i = a&&b
parses butfor i in a&&b
is a syntax error. I fixed that by usingin
precedence in all cases.Next I decided that it's not so good to allow
for i = 1:n f(i) end
, so I deprecated that. Allowing space as an implicit separator here is one thing that prevents generalizingin
syntax to other function names.