From: Batuhan Taskaya Date: Thu, 21 May 2020 19:57:52 +0000 (+0300) Subject: bpo-40334: Correctly generate C parser when assigned var is None (GH-20296) X-Git-Tag: v3.10.0a1~868 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f50516e6a978ee694232512399dd1ab47aaebab1;p=thirdparty%2FPython%2Fcpython.git bpo-40334: Correctly generate C parser when assigned var is None (GH-20296) 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. --- diff --git a/Tools/peg_generator/pegen/c_generator.py b/Tools/peg_generator/pegen/c_generator.py index c93b348e2b44..e8107ec044d0 100644 --- a/Tools/peg_generator/pegen/c_generator.py +++ b/Tools/peg_generator/pegen/c_generator.py @@ -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