[Python-checkins] Validate the AST produced by the parser in debug mode (GH-21643)

Pablo Galindo webhook-mailer at python.org
Mon Jul 27 18:47:08 EDT 2020


https://github.com/python/cpython/commit/1332226b32da44087a55e1d71990ee6899dfd28a
commit: 1332226b32da44087a55e1d71990ee6899dfd28a
branch: master
author: Pablo Galindo <Pablogsal at gmail.com>
committer: GitHub <noreply at github.com>
date: 2020-07-27T23:46:59+01:00
summary:

Validate the AST produced by the parser in debug mode (GH-21643)

This will improve the debug experience if something fails in the produced AST. Previously, errors in the produced AST can be felt much later like in the garbage collector or the compiler, making debugging them much more difficult.

files:
M Parser/pegen.c

diff --git a/Parser/pegen.c b/Parser/pegen.c
index e2cbf8ba2461c..f615907f5f571 100644
--- a/Parser/pegen.c
+++ b/Parser/pegen.c
@@ -4,6 +4,7 @@
 
 #include "pegen.h"
 #include "string_parser.h"
+#include "ast.h"
 
 PyObject *
 _PyPegen_new_type_comment(Parser *p, char *s)
@@ -1137,6 +1138,14 @@ _PyPegen_run_parser(Parser *p)
         return RAISE_SYNTAX_ERROR("multiple statements found while compiling a single statement");
     }
 
+#if defined(Py_DEBUG) && defined(Py_BUILD_CORE)
+    if (p->start_rule == Py_single_input ||
+        p->start_rule == Py_file_input ||
+        p->start_rule == Py_eval_input)
+    {
+        assert(PyAST_Validate(res));
+    }
+#endif
     return res;
 }
 



More information about the Python-checkins mailing list