]> git.ipfire.org Git - thirdparty/Python/cpython.git/commit
[3.9] bpo-41631: _ast module uses again a global state (GH-21961) (GH-22258)
authorPablo Galindo <Pablogsal@gmail.com>
Tue, 15 Sep 2020 18:32:56 +0000 (19:32 +0100)
committerGitHub <noreply@github.com>
Tue, 15 Sep 2020 18:32:56 +0000 (20:32 +0200)
commit55e0836849c14fb474e1ba7f37851e07660eea3c
tree95427c11bbfe568191eeb77ab20b9f779d1451e5
parent0cc037f8a72c283bf64d1968e34cbdc22b0e3010
[3.9] bpo-41631: _ast module uses again a global state (GH-21961) (GH-22258)

Partially revert commit ac46eb4ad6662cf6d771b20d8963658b2186c48c:
"bpo-38113: Update the Python-ast.c generator to PEP384 (gh-15957)".

Using a module state per module instance is causing subtle practical
problems.

For example, the Mercurial project replaces the __import__() function
to implement lazy import, whereas Python expected that "import _ast"
always return a fully initialized _ast module.

Add _PyAST_Fini() to clear the state at exit.

The _ast module has no state (set _astmodule.m_size to 0). Remove
astmodule_traverse(), astmodule_clear() and astmodule_free()
functions..
(cherry picked from commit e5fbe0cbd4be99ced5f000ad382208ad2a561c90)

Co-authored-by: Victor Stinner <vstinner@python.org>
Include/internal/pycore_pylifecycle.h
Lib/ast.py
Lib/test/test_ast.py
Misc/NEWS.d/next/Core and Builtins/2020-08-26-11-23-31.bpo-41631.3jZcd9.rst [new file with mode: 0644]
Parser/asdl_c.py
Python/Python-ast.c
Python/pylifecycle.c