bpo-46417: Clear more static types (GH-30796)

* Move PyContext static types into object.c static_types list.
* Rename PyContextTokenMissing_Type to _PyContextTokenMissing_Type
  and declare it in pycore_context.h.
* _PyHamtItems types are no long exported: replace PyAPI_DATA() with
  extern.
This commit is contained in:
Victor Stinner 2022-01-22 18:55:48 +01:00 committed by GitHub
parent 1f8014c5b4
commit 500c146387
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 30 additions and 54 deletions

View file

@ -8,9 +8,11 @@
#include "pycore_hamt.h" /* PyHamtObject */ #include "pycore_hamt.h" /* PyHamtObject */
extern PyTypeObject _PyContextTokenMissing_Type;
/* runtime lifecycle */ /* runtime lifecycle */
PyStatus _PyContext_InitTypes(PyInterpreterState *); PyStatus _PyContext_Init(PyInterpreterState *);
void _PyContext_Fini(PyInterpreterState *); void _PyContext_Fini(PyInterpreterState *);

View file

@ -8,9 +8,16 @@
#define _Py_HAMT_MAX_TREE_DEPTH 7 #define _Py_HAMT_MAX_TREE_DEPTH 7
extern PyTypeObject _PyHamt_Type;
extern PyTypeObject _PyHamt_ArrayNode_Type;
extern PyTypeObject _PyHamt_BitmapNode_Type;
extern PyTypeObject _PyHamt_CollisionNode_Type;
extern PyTypeObject _PyHamtKeys_Type;
extern PyTypeObject _PyHamtValues_Type;
extern PyTypeObject _PyHamtItems_Type;
/* runtime lifecycle */ /* runtime lifecycle */
PyStatus _PyHamt_InitTypes(PyInterpreterState *);
void _PyHamt_Fini(PyInterpreterState *); void _PyHamt_Fini(PyInterpreterState *);
@ -69,15 +76,6 @@ typedef struct {
} PyHamtIterator; } PyHamtIterator;
PyAPI_DATA(PyTypeObject) _PyHamt_Type;
PyAPI_DATA(PyTypeObject) _PyHamt_ArrayNode_Type;
PyAPI_DATA(PyTypeObject) _PyHamt_BitmapNode_Type;
PyAPI_DATA(PyTypeObject) _PyHamt_CollisionNode_Type;
PyAPI_DATA(PyTypeObject) _PyHamtKeys_Type;
PyAPI_DATA(PyTypeObject) _PyHamtValues_Type;
PyAPI_DATA(PyTypeObject) _PyHamtItems_Type;
/* Create a new HAMT immutable mapping. */ /* Create a new HAMT immutable mapping. */
PyHamtObject * _PyHamt_New(void); PyHamtObject * _PyHamt_New(void);

View file

@ -4,6 +4,7 @@
#include "Python.h" #include "Python.h"
#include "pycore_call.h" // _PyObject_CallNoArgs() #include "pycore_call.h" // _PyObject_CallNoArgs()
#include "pycore_ceval.h" // _Py_EnterRecursiveCall() #include "pycore_ceval.h" // _Py_EnterRecursiveCall()
#include "pycore_context.h" // _PyContextTokenMissing_Type
#include "pycore_dict.h" // _PyObject_MakeDictFromInstanceAttributes() #include "pycore_dict.h" // _PyObject_MakeDictFromInstanceAttributes()
#include "pycore_floatobject.h" // _PyFloat_DebugMallocStats() #include "pycore_floatobject.h" // _PyFloat_DebugMallocStats()
#include "pycore_initconfig.h" // _PyStatus_EXCEPTION() #include "pycore_initconfig.h" // _PyStatus_EXCEPTION()
@ -1853,6 +1854,9 @@ static PyTypeObject* static_types[] = {
&PyClassMethod_Type, &PyClassMethod_Type,
&PyCode_Type, &PyCode_Type,
&PyComplex_Type, &PyComplex_Type,
&PyContextToken_Type,
&PyContextVar_Type,
&PyContext_Type,
&PyCoro_Type, &PyCoro_Type,
&PyDictItems_Type, &PyDictItems_Type,
&PyDictIterItem_Type, &PyDictIterItem_Type,
@ -1867,6 +1871,7 @@ static PyTypeObject* static_types[] = {
&PyDict_Type, &PyDict_Type,
&PyEllipsis_Type, &PyEllipsis_Type,
&PyEnum_Type, &PyEnum_Type,
&PyFilter_Type,
&PyFloat_Type, &PyFloat_Type,
&PyFrame_Type, &PyFrame_Type,
&PyFrozenSet_Type, &PyFrozenSet_Type,
@ -1879,6 +1884,7 @@ static PyTypeObject* static_types[] = {
&PyList_Type, &PyList_Type,
&PyLongRangeIter_Type, &PyLongRangeIter_Type,
&PyLong_Type, &PyLong_Type,
&PyMap_Type,
&PyMemberDescr_Type, &PyMemberDescr_Type,
&PyMemoryView_Type, &PyMemoryView_Type,
&PyMethodDescr_Type, &PyMethodDescr_Type,
@ -1905,12 +1911,21 @@ static PyTypeObject* static_types[] = {
&PyUnicodeIter_Type, &PyUnicodeIter_Type,
&PyUnicode_Type, &PyUnicode_Type,
&PyWrapperDescr_Type, &PyWrapperDescr_Type,
&PyZip_Type,
&Py_GenericAliasType, &Py_GenericAliasType,
&_PyAnextAwaitable_Type, &_PyAnextAwaitable_Type,
&_PyAsyncGenASend_Type, &_PyAsyncGenASend_Type,
&_PyAsyncGenAThrow_Type, &_PyAsyncGenAThrow_Type,
&_PyAsyncGenWrappedValue_Type, &_PyAsyncGenWrappedValue_Type,
&_PyContextTokenMissing_Type,
&_PyCoroWrapper_Type, &_PyCoroWrapper_Type,
&_PyHamtItems_Type,
&_PyHamtKeys_Type,
&_PyHamtValues_Type,
&_PyHamt_ArrayNode_Type,
&_PyHamt_BitmapNode_Type,
&_PyHamt_CollisionNode_Type,
&_PyHamt_Type,
&_PyInterpreterID_Type, &_PyInterpreterID_Type,
&_PyManagedBuffer_Type, &_PyManagedBuffer_Type,
&_PyMethodWrapper_Type, &_PyMethodWrapper_Type,

View file

@ -2986,11 +2986,6 @@ _PyBuiltin_Init(PyInterpreterState *interp)
const PyConfig *config = _PyInterpreterState_GetConfig(interp); const PyConfig *config = _PyInterpreterState_GetConfig(interp);
if (PyType_Ready(&PyFilter_Type) < 0 ||
PyType_Ready(&PyMap_Type) < 0 ||
PyType_Ready(&PyZip_Type) < 0)
return NULL;
mod = _PyModule_CreateInitialized(&builtinsmodule, PYTHON_API_VERSION); mod = _PyModule_CreateInitialized(&builtinsmodule, PYTHON_API_VERSION);
if (mod == NULL) if (mod == NULL)
return NULL; return NULL;

View file

@ -1260,7 +1260,7 @@ context_token_missing_tp_repr(PyObject *self)
} }
PyTypeObject PyContextTokenMissing_Type = { PyTypeObject _PyContextTokenMissing_Type = {
PyVarObject_HEAD_INIT(&PyType_Type, 0) PyVarObject_HEAD_INIT(&PyType_Type, 0)
"Token.MISSING", "Token.MISSING",
sizeof(PyContextTokenMissing), sizeof(PyContextTokenMissing),
@ -1279,7 +1279,7 @@ get_token_missing(void)
} }
_token_missing = (PyObject *)PyObject_New( _token_missing = (PyObject *)PyObject_New(
PyContextTokenMissing, &PyContextTokenMissing_Type); PyContextTokenMissing, &_PyContextTokenMissing_Type);
if (_token_missing == NULL) { if (_token_missing == NULL) {
return NULL; return NULL;
} }
@ -1323,25 +1323,12 @@ _PyContext_Fini(PyInterpreterState *interp)
PyStatus PyStatus
_PyContext_InitTypes(PyInterpreterState *interp) _PyContext_Init(PyInterpreterState *interp)
{ {
if (!_Py_IsMainInterpreter(interp)) { if (!_Py_IsMainInterpreter(interp)) {
return _PyStatus_OK(); return _PyStatus_OK();
} }
PyStatus status = _PyHamt_InitTypes(interp);
if (_PyStatus_EXCEPTION(status)) {
return status;
}
if ((PyType_Ready(&PyContext_Type) < 0) ||
(PyType_Ready(&PyContextVar_Type) < 0) ||
(PyType_Ready(&PyContextToken_Type) < 0) ||
(PyType_Ready(&PyContextTokenMissing_Type) < 0))
{
return _PyStatus_ERR("can't init context types");
}
PyObject *missing = get_token_missing(); PyObject *missing = get_token_missing();
if (PyDict_SetItemString( if (PyDict_SetItemString(
PyContextToken_Type.tp_dict, "MISSING", missing)) PyContextToken_Type.tp_dict, "MISSING", missing))

View file

@ -2953,27 +2953,6 @@ PyTypeObject _PyHamt_CollisionNode_Type = {
}; };
PyStatus
_PyHamt_InitTypes(PyInterpreterState *interp)
{
if (!_Py_IsMainInterpreter(interp)) {
return _PyStatus_OK();
}
if ((PyType_Ready(&_PyHamt_Type) < 0) ||
(PyType_Ready(&_PyHamt_ArrayNode_Type) < 0) ||
(PyType_Ready(&_PyHamt_BitmapNode_Type) < 0) ||
(PyType_Ready(&_PyHamt_CollisionNode_Type) < 0) ||
(PyType_Ready(&_PyHamtKeys_Type) < 0) ||
(PyType_Ready(&_PyHamtValues_Type) < 0) ||
(PyType_Ready(&_PyHamtItems_Type) < 0))
{
return _PyStatus_ERR("can't init hamt types");
}
return _PyStatus_OK();
}
void void
_PyHamt_Fini(PyInterpreterState *interp) _PyHamt_Fini(PyInterpreterState *interp)
{ {

View file

@ -760,7 +760,7 @@ pycore_init_types(PyInterpreterState *interp)
return status; return status;
} }
status = _PyContext_InitTypes(interp); status = _PyContext_Init(interp);
if (_PyStatus_EXCEPTION(status)) { if (_PyStatus_EXCEPTION(status)) {
return status; return status;
} }