]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Validate the AST produced by the parser in debug mode (GH-21643)
authorPablo Galindo <Pablogsal@gmail.com>
Mon, 27 Jul 2020 22:46:59 +0000 (23:46 +0100)
committerGitHub <noreply@github.com>
Mon, 27 Jul 2020 22:46:59 +0000 (23:46 +0100)
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.

Parser/pegen.c

index e2cbf8ba2461ce161ad6b82290e31fc4562beea5..f615907f5f571f652007b114baec7cf8cec0f584 100644 (file)
@@ -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;
 }