]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-40334: Correctly generate C parser when assigned var is None (GH-20296)
authorBatuhan Taskaya <batuhanosmantaskaya@gmail.com>
Thu, 21 May 2020 19:57:52 +0000 (22:57 +0300)
committerGitHub <noreply@github.com>
Thu, 21 May 2020 19:57:52 +0000 (20:57 +0100)
When there are 2 negative lookaheads in the same rule, let's say `!"(" blabla "," !")"`, there will the 2 `FunctionCall`'s where assigned value is None. Currently when the `add_var` is called
the first one will be ignored but when the second lookahead's var is sent to dedupe it
will be returned as `None_1` and this won't be ignored by the declaration generator in the `visit_Alt`. This patch adds an explicit check to `add_var` to distinguish whether if there is a variable or not.

Tools/peg_generator/pegen/c_generator.py

index c93b348e2b44c932f605e6684ff94d36b71272c5..e8107ec044d0ab4a6ea17ce6cdce517cafeba1dc 100644 (file)
@@ -722,4 +722,7 @@ class CParserGenerator(ParserGenerator, GrammarVisitor):
 
     def add_var(self, node: NamedItem) -> Tuple[Optional[str], Optional[str]]:
         call = self.callmakervisitor.visit(node.item)
-        return self.dedupe(node.name if node.name else call.assigned_variable), call.return_type
+        name = node.name if node.name else call.assigned_variable
+        if name is not None:
+            name = self.dedupe(name)
+        return name, call.return_type