]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.9] Validate the AST produced by the parser in debug mode (GH-21643) (GH-21646)
authorPablo Galindo <Pablogsal@gmail.com>
Mon, 27 Jul 2020 23:12:31 +0000 (00:12 +0100)
committerGitHub <noreply@github.com>
Mon, 27 Jul 2020 23:12:31 +0000 (00:12 +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..
(cherry picked from commit 1332226b32da44087a55e1d71990ee6899dfd28a)

Co-authored-by: Pablo Galindo <Pablogsal@gmail.com>
Parser/pegen/pegen.c

index beb2b2da5696d937169c3674d2659ab1142b7480..184cadc7f42aeaf97f3c856447afbded324c9d72 100644 (file)
@@ -4,6 +4,7 @@
 
 #include "pegen.h"
 #include "parse_string.h"
+#include "ast.h"
 
 PyObject *
 _PyPegen_new_type_comment(Parser *p, char *s)
@@ -1136,6 +1137,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;
 }