# HG changeset patch # User Yuya Nishihara # Date 2015-07-06 12:55:55 # Node ID 42ac9d1d1572e07760927f75781f911bcb3fa9cc # Parent 43a8a87fc175740ccb1fd3f0aa8458029e085ccc parser: reorder infix/suffix handling to be similar to prefix/primary flow It can be exactly the same flow as the prefix/primary handling. A suffix action is accepted only if the next token never starts new term. diff --git a/mercurial/parser.py b/mercurial/parser.py --- a/mercurial/parser.py +++ b/mercurial/parser.py @@ -60,15 +60,14 @@ class parser(object): # gather tokens until we meet a lower binding strength while bind < self._elements[self.current[0]][0]: token, value, pos = self._advance() + # handle infix rules, take as suffix if unambiguous infix, suffix = self._elements[token][3:] - # check for suffix - next token isn't a valid prefix if suffix and not self._hasnewterm(): expr = (suffix[0], expr) + elif infix: + expr = (infix[0], expr, self._parseoperand(*infix[1:])) else: - # handle infix rules - if not infix: - raise error.ParseError(_("not an infix: %s") % token, pos) - expr = (infix[0], expr, self._parseoperand(*infix[1:])) + raise error.ParseError(_("not an infix: %s") % token, pos) return expr def parse(self, tokeniter): 'generate a parse tree from tokens'