Mercurial > public > mercurial-scm > hg-stable
diff mercurial/parser.py @ 25801:272ff3680bf3
parser: fill invalid infix and suffix actions by None
This can simplify the expansion of (prefix, infix, suffix) actions.
author | Yuya Nishihara <yuya@tcha.org> |
---|---|
date | Sun, 05 Jul 2015 11:17:22 +0900 |
parents | 48919d246a47 |
children | cc741c76b26a |
line wrap: on
line diff
--- a/mercurial/parser.py Sun Jul 05 11:06:58 2015 +0900 +++ b/mercurial/parser.py Sun Jul 05 11:17:22 2015 +0900 @@ -12,7 +12,7 @@ # takes a tokenizer and elements # tokenizer is an iterator that returns (type, value, pos) tuples # elements is a mapping of types to binding strength, prefix, infix and -# optional suffix actions +# suffix actions # an action is a tree node name, a tree label, and an optional match # __call__(program) parses program into a labeled tree @@ -54,16 +54,14 @@ # gather tokens until we meet a lower binding strength while bind < self._elements[self.current[0]][0]: token, value, pos = self._advance() - e = self._elements[token] + infix, suffix = self._elements[token][2:] # check for suffix - next token isn't a valid prefix - if len(e) == 4 and not self._elements[self.current[0]][1]: - suffix = e[3] + if suffix and not self._elements[self.current[0]][1]: expr = (suffix[0], expr) else: # handle infix rules - if len(e) < 3 or not e[2]: + if not infix: raise error.ParseError(_("not an infix: %s") % token, pos) - infix = e[2] if len(infix) == 3 and infix[2] == self.current[0]: self._match(infix[2], pos) expr = (infix[0], expr, (None))