Mercurial > hg
changeset 25816:43a8a87fc175
parser: resolve ambiguity where both prefix and primary actions are defined
If both actions are defined, a primary-expression action is accepted only if
the next token never starts new term. For example,
parsed as primary expression:
":" # next token 'end' has no action
"(:)" # next token ')' has no action
":+y" # next token '+' is infix operator
parsed as prefix operator:
":y" # next token 'y' is primary expression
":-y" # next token '-' is prefix operator
This is mostly the same resolution as the infix/suffix rules.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 05 Jul 2015 12:09:27 +0900 |
parents | e71e5629e006 |
children | 42ac9d1d1572 |
files | mercurial/parser.py |
diffstat | 1 files changed, 2 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/parser.py Sun Jul 05 12:02:13 2015 +0900 +++ b/mercurial/parser.py Sun Jul 05 12:09:27 2015 +0900 @@ -49,9 +49,9 @@ return expr def _parse(self, bind=0): token, value, pos = self._advance() - # handle prefix rules on current token + # handle prefix rules on current token, take as primary if unambiguous primary, prefix = self._elements[token][1:3] - if primary: + if primary and not (prefix and self._hasnewterm()): expr = (primary, value) elif prefix: expr = (prefix[0], self._parseoperand(*prefix[1:]))