[Python-checkins] bpo-43244: Remove the PyAST_Validate() function (GH-24911)

vstinner webhook-mailer at python.org
Thu Mar 18 09:57:57 EDT 2021


https://github.com/python/cpython/commit/eec8e61992fb654d4cf58de4d727c18622b8303e
commit: eec8e61992fb654d4cf58de4d727c18622b8303e
branch: master
author: Victor Stinner <vstinner at python.org>
committer: vstinner <vstinner at python.org>
date: 2021-03-18T14:57:49+01:00
summary:

bpo-43244: Remove the PyAST_Validate() function (GH-24911)

Remove the PyAST_Validate() function. It is no longer possible to
build a AST object (mod_ty type) with the public C API. The function
was already excluded from the limited C API (PEP 384).

Rename PyAST_Validate() function to _PyAST_Validate(), move it to the
internal C API, and don't export it anymore (replace PyAPI_FUNC with
extern).

The function was added in bpo-12575 by
the commit 832bfe2ebd5ecfa92031cd40c8b41835ba90487f.

files:
A Misc/NEWS.d/next/C API/2021-03-17-23-20-07.bpo-43244.diyn2C.rst
M Doc/whatsnew/3.10.rst
M Include/ast.h
M Include/internal/pycore_ast.h
M Parser/pegen.c
M Python/ast.c
M Python/bltinmodule.c

diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst
index 00b0f985e3386..25f71c4253d84 100644
--- a/Doc/whatsnew/3.10.rst
+++ b/Doc/whatsnew/3.10.rst
@@ -1353,3 +1353,8 @@ Removed
   Python already implicitly installs signal handlers: see
   :c:member:`PyConfig.install_signal_handlers`.
   (Contributed by Victor Stinner in :issue:`41713`.)
+
+* Remove the ``PyAST_Validate()`` function. It is no longer possible to build a
+  AST object (``mod_ty`` type) with the public C API. The function was already
+  excluded from the limited C API (:pep:`384`).
+  (Contributed by Victor Stinner in :issue:`43244`.)
diff --git a/Include/ast.h b/Include/ast.h
index 2f19b1a870dac..82bfa4800cdd5 100644
--- a/Include/ast.h
+++ b/Include/ast.h
@@ -7,8 +7,6 @@ extern "C" {
 
 #include "Python-ast.h"   /* mod_ty */
 
-PyAPI_FUNC(int) PyAST_Validate(mod_ty);
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/Include/internal/pycore_ast.h b/Include/internal/pycore_ast.h
index 38c9212b07ca0..6cc0b9b3b000f 100644
--- a/Include/internal/pycore_ast.h
+++ b/Include/internal/pycore_ast.h
@@ -10,6 +10,8 @@ extern "C" {
 
 #include "Python-ast.h"           // expr_ty
 
+extern int _PyAST_Validate(mod_ty);
+
 /* _PyAST_ExprAsUnicode is defined in ast_unparse.c */
 extern PyObject* _PyAST_ExprAsUnicode(expr_ty);
 
diff --git a/Misc/NEWS.d/next/C API/2021-03-17-23-20-07.bpo-43244.diyn2C.rst b/Misc/NEWS.d/next/C API/2021-03-17-23-20-07.bpo-43244.diyn2C.rst
new file mode 100644
index 0000000000000..6632ace472289
--- /dev/null
+++ b/Misc/NEWS.d/next/C API/2021-03-17-23-20-07.bpo-43244.diyn2C.rst	
@@ -0,0 +1,3 @@
+Remove the ``PyAST_Validate()`` function. It is no longer possible to build a
+AST object (``mod_ty`` type) with the public C API. The function was already
+excluded from the limited C API (:pep:`384`). Patch by Victor Stinner.
diff --git a/Parser/pegen.c b/Parser/pegen.c
index 84bdf8dd3f89e..24aa3af336c34 100644
--- a/Parser/pegen.c
+++ b/Parser/pegen.c
@@ -1,4 +1,5 @@
 #include <Python.h>
+#include "pycore_ast.h"           // _PyAST_Validate()
 #include <errcode.h>
 #include "tokenizer.h"
 
@@ -1271,7 +1272,7 @@ _PyPegen_run_parser(Parser *p)
         p->start_rule == Py_file_input ||
         p->start_rule == Py_eval_input)
     {
-        if (!PyAST_Validate(res)) {
+        if (!_PyAST_Validate(res)) {
             return NULL;
         }
     }
diff --git a/Python/ast.c b/Python/ast.c
index c58b4a69b1e32..8ac2e60c92fde 100644
--- a/Python/ast.c
+++ b/Python/ast.c
@@ -551,7 +551,7 @@ validate_exprs(asdl_expr_seq *exprs, expr_context_ty ctx, int null_ok)
 }
 
 int
-PyAST_Validate(mod_ty mod)
+_PyAST_Validate(mod_ty mod)
 {
     int res = 0;
 
diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c
index 52591c4a46f3d..4683103e09437 100644
--- a/Python/bltinmodule.c
+++ b/Python/bltinmodule.c
@@ -4,6 +4,7 @@
 #include <ctype.h>
 #include "ast.h"
 #undef Yield   /* undefine macro conflicting with <winbase.h> */
+#include "pycore_ast.h"           // _PyAST_Validate()
 #include "pycore_object.h"        // _Py_AddToAllObjects()
 #include "pycore_pyerrors.h"      // _PyErr_NoMemory()
 #include "pycore_pystate.h"       // _PyThreadState_GET()
@@ -835,7 +836,7 @@ builtin_compile_impl(PyObject *module, PyObject *source, PyObject *filename,
                 PyArena_Free(arena);
                 goto error;
             }
-            if (!PyAST_Validate(mod)) {
+            if (!_PyAST_Validate(mod)) {
                 PyArena_Free(arena);
                 goto error;
             }



More information about the Python-checkins mailing list