Fix invalid [|] parsing when | is operator#3206
Draft
jjtolton wants to merge 1 commit intomthom:masterfrom
Draft
Fix invalid [|] parsing when | is operator#3206jjtolton wants to merge 1 commit intomthom:masterfrom
jjtolton wants to merge 1 commit intomthom:masterfrom
Conversation
When | is defined as an operator (e.g., via dcgs), expressions like 1*[|] incorrectly parsed because the | was treated as a term due to its operator spec. This caused compute_arity_in_list() to steal terms from before the [ bracket. The fix explicitly rejects HeadTailSeparator at term positions in compute_arity_in_list(), since [|...] with nothing before | is always invalid regardless of whether | is an operator. Fixes: #5
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
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.
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.