Fix invalid [|] parsing when | is operator #3206
Draft
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.
Summary
[|]inside expressions like1*[|]incorrectly parsed when|is defined as an operator (e.g., vialibrary(dcgs))|with XFY spec was being treated as a term incompute_arity_in_list(), causing it to steal terms from before the[bracketBug Report
jjtolton#5
Test Cases
All should throw
syntax_errorwhen|is operator (1105 xfy):"{1*[|]. }." % space before } "{ ! * [ | ] * ! }." % spaces throughout "{!*[|]*!}." % no spaces "!*[|]*!." % without braces "(!*[|]*!)." % with parens "!*[|]*1." % ending with number "!*[|]*A." % ending with variableFix
Explicitly reject
HeadTailSeparatorat term positions incompute_arity_in_list(), since[|...]with nothing before|is always invalid.