mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
[3.9] bpo-42123: Run the parser two times and only enable invalid rules on the second run (GH-22111) (GH-23011)
* Implement running the parser a second time for the errors messages
The first parser run is only responsible for detecting whether
there is a `SyntaxError` or not. If there isn't the AST gets returned.
Otherwise, the parser is run a second time with all the `invalid_*`
rules enabled so that all the customized error messages get produced.
(cherry picked from commit bca7014032
)
This commit is contained in:
parent
c4b58cea47
commit
24a7c298d4
6 changed files with 71 additions and 51 deletions
|
@ -730,7 +730,10 @@ class CParserGenerator(ParserGenerator, GrammarVisitor):
|
|||
def visit_Alt(
|
||||
self, node: Alt, is_loop: bool, is_gather: bool, rulename: Optional[str]
|
||||
) -> None:
|
||||
self.print(f"{{ // {node}")
|
||||
if len(node.items) == 1 and str(node.items[0]).startswith('invalid_'):
|
||||
self.print(f"if (p->call_invalid_rules) {{ // {node}")
|
||||
else:
|
||||
self.print(f"{{ // {node}")
|
||||
with self.indent():
|
||||
self._check_for_errors()
|
||||
node_str = str(node).replace('"', '\\"')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue