diff options
author | Guido van Rossum <guido@python.org> | 2020-05-25 16:37:32 -0700 |
---|---|---|
committer | Guido van Rossum <guido@python.org> | 2020-05-25 16:37:32 -0700 |
commit | 8225723f29339043c641bb487afb6acd0d4c975d (patch) | |
tree | aacc065a1aa4323fe03852fb25d1403549906853 | |
parent | 3cbe7c3651d64cb15277f5fae6d7976020846f04 (diff) | |
download | cpython-git-8225723f29339043c641bb487afb6acd0d4c975d.tar.gz |
Fix D() macro usage for soft keywords
-rw-r--r-- | Tools/peg_generator/pegen/c_generator.py | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/Tools/peg_generator/pegen/c_generator.py b/Tools/peg_generator/pegen/c_generator.py index 0ca0e9443a..885ff05858 100644 --- a/Tools/peg_generator/pegen/c_generator.py +++ b/Tools/peg_generator/pegen/c_generator.py @@ -669,8 +669,9 @@ class CParserGenerator(ParserGenerator, GrammarVisitor): self.print("{") # We have parsed successfully all the conditions for the option. with self.indent(): + node_str = str(node).replace('"', '\\"') self.print( - f'D(fprintf(stderr, "%*c+ {rulename}[%d-%d]: %s succeeded!\\n", p->level, \' \', _mark, p->mark, "{node}"));' + f'D(fprintf(stderr, "%*c+ {rulename}[%d-%d]: %s succeeded!\\n", p->level, \' \', _mark, p->mark, "{node_str}"));' ) # Prepare to emmit the rule action and do so if node.action and "EXTRA" in node.action: @@ -723,8 +724,9 @@ class CParserGenerator(ParserGenerator, GrammarVisitor): self.print(f"{{ // {node}") with self.indent(): self._check_for_errors() + node_str = str(node).replace('"', '\\"') self.print( - f'D(fprintf(stderr, "%*c> {rulename}[%d-%d]: %s\\n", p->level, \' \', _mark, p->mark, "{node}"));' + f'D(fprintf(stderr, "%*c> {rulename}[%d-%d]: %s\\n", p->level, \' \', _mark, p->mark, "{node_str}"));' ) # Prepare variable declarations for the alternative vars = self.collect_vars(node) @@ -746,9 +748,10 @@ class CParserGenerator(ParserGenerator, GrammarVisitor): self.handle_alt_normal(node, is_gather, rulename) self.print("p->mark = _mark;") + node_str = str(node).replace('"', '\\"') self.print( f"D(fprintf(stderr, \"%*c%s {rulename}[%d-%d]: %s failed!\\n\", p->level, ' ',\n" - f' p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "{node}"));' + f' p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "{node_str}"));' ) if "_cut_var" in vars: self.print("if (_cut_var) {") |