mercurial/parser.py
changeset 25815 e71e5629e006
parent 25804 f0a77cb6316a
child 25816 43a8a87fc175
--- a/mercurial/parser.py	Fri Jul 17 15:53:56 2015 +0200
+++ b/mercurial/parser.py	Sun Jul 05 12:02:13 2015 +0900
@@ -11,8 +11,8 @@
 
 # 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
-# suffix actions
+# elements is a mapping of types to binding strength, primary, prefix, infix
+# and suffix actions
 # an action is a tree node name, a tree label, and an optional match
 # __call__(program) parses program into a labeled tree
 
@@ -31,7 +31,7 @@
         return t
     def _hasnewterm(self):
         'True if next token may start new term'
-        return bool(self._elements[self.current[0]][1])
+        return any(self._elements[self.current[0]][1:3])
     def _match(self, m):
         'make sure the tokenizer matches an end condition'
         if self.current[0] != m:
@@ -50,17 +50,17 @@
     def _parse(self, bind=0):
         token, value, pos = self._advance()
         # handle prefix rules on current token
-        prefix = self._elements[token][1]
-        if not prefix:
+        primary, prefix = self._elements[token][1:3]
+        if primary:
+            expr = (primary, value)
+        elif prefix:
+            expr = (prefix[0], self._parseoperand(*prefix[1:]))
+        else:
             raise error.ParseError(_("not a prefix: %s") % token, pos)
-        if len(prefix) == 1:
-            expr = (prefix[0], value)
-        else:
-            expr = (prefix[0], self._parseoperand(*prefix[1:]))
         # gather tokens until we meet a lower binding strength
         while bind < self._elements[self.current[0]][0]:
             token, value, pos = self._advance()
-            infix, suffix = self._elements[token][2:]
+            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)