From 500c146387b01ea797b52e6a54caf228384e184c Mon Sep 17 00:00:00 2001 From: Victor Stinner Date: Sat, 22 Jan 2022 18:55:48 +0100 Subject: [PATCH] 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. --- Include/internal/pycore_context.h | 4 +++- Include/internal/pycore_hamt.h | 18 ++++++++---------- Objects/object.c | 15 +++++++++++++++ Python/bltinmodule.c | 5 ----- Python/context.c | 19 +++---------------- Python/hamt.c | 21 --------------------- Python/pylifecycle.c | 2 +- 7 files changed, 30 insertions(+), 54 deletions(-) diff --git a/Include/internal/pycore_context.h b/Include/internal/pycore_context.h index 31ca0a43fae..1bf4e8f3ee5 100644 --- a/Include/internal/pycore_context.h +++ b/Include/internal/pycore_context.h @@ -8,9 +8,11 @@ #include "pycore_hamt.h" /* PyHamtObject */ +extern PyTypeObject _PyContextTokenMissing_Type; + /* runtime lifecycle */ -PyStatus _PyContext_InitTypes(PyInterpreterState *); +PyStatus _PyContext_Init(PyInterpreterState *); void _PyContext_Fini(PyInterpreterState *); diff --git a/Include/internal/pycore_hamt.h b/Include/internal/pycore_hamt.h index cf9c19e022d..85e35c5afc9 100644 --- a/Include/internal/pycore_hamt.h +++ b/Include/internal/pycore_hamt.h @@ -8,9 +8,16 @@ #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 */ -PyStatus _PyHamt_InitTypes(PyInterpreterState *); void _PyHamt_Fini(PyInterpreterState *); @@ -69,15 +76,6 @@ typedef struct { } 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. */ PyHamtObject * _PyHamt_New(void); diff --git a/Objects/object.c b/Objects/object.c index a5ee8eef4a3..a1663c0dbb7 100644 --- a/Objects/object.c +++ b/Objects/object.c @@ -4,6 +4,7 @@ #include "Python.h" #include "pycore_call.h" // _PyObject_CallNoArgs() #include "pycore_ceval.h" // _Py_EnterRecursiveCall() +#include "pycore_context.h" // _PyContextTokenMissing_Type #include "pycore_dict.h" // _PyObject_MakeDictFromInstanceAttributes() #include "pycore_floatobject.h" // _PyFloat_DebugMallocStats() #include "pycore_initconfig.h" // _PyStatus_EXCEPTION() @@ -1853,6 +1854,9 @@ static PyTypeObject* static_types[] = { &PyClassMethod_Type, &PyCode_Type, &PyComplex_Type, + &PyContextToken_Type, + &PyContextVar_Type, + &PyContext_Type, &PyCoro_Type, &PyDictItems_Type, &PyDictIterItem_Type, @@ -1867,6 +1871,7 @@ static PyTypeObject* static_types[] = { &PyDict_Type, &PyEllipsis_Type, &PyEnum_Type, + &PyFilter_Type, &PyFloat_Type, &PyFrame_Type, &PyFrozenSet_Type, @@ -1879,6 +1884,7 @@ static PyTypeObject* static_types[] = { &PyList_Type, &PyLongRangeIter_Type, &PyLong_Type, + &PyMap_Type, &PyMemberDescr_Type, &PyMemoryView_Type, &PyMethodDescr_Type, @@ -1905,12 +1911,21 @@ static PyTypeObject* static_types[] = { &PyUnicodeIter_Type, &PyUnicode_Type, &PyWrapperDescr_Type, + &PyZip_Type, &Py_GenericAliasType, &_PyAnextAwaitable_Type, &_PyAsyncGenASend_Type, &_PyAsyncGenAThrow_Type, &_PyAsyncGenWrappedValue_Type, + &_PyContextTokenMissing_Type, &_PyCoroWrapper_Type, + &_PyHamtItems_Type, + &_PyHamtKeys_Type, + &_PyHamtValues_Type, + &_PyHamt_ArrayNode_Type, + &_PyHamt_BitmapNode_Type, + &_PyHamt_CollisionNode_Type, + &_PyHamt_Type, &_PyInterpreterID_Type, &_PyManagedBuffer_Type, &_PyMethodWrapper_Type, diff --git a/Python/bltinmodule.c b/Python/bltinmodule.c index ecd8be1af6f..ed612091d83 100644 --- a/Python/bltinmodule.c +++ b/Python/bltinmodule.c @@ -2986,11 +2986,6 @@ _PyBuiltin_Init(PyInterpreterState *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); if (mod == NULL) return NULL; diff --git a/Python/context.c b/Python/context.c index 9ed73b7444d..f3033d9b649 100644 --- a/Python/context.c +++ b/Python/context.c @@ -1260,7 +1260,7 @@ context_token_missing_tp_repr(PyObject *self) } -PyTypeObject PyContextTokenMissing_Type = { +PyTypeObject _PyContextTokenMissing_Type = { PyVarObject_HEAD_INIT(&PyType_Type, 0) "Token.MISSING", sizeof(PyContextTokenMissing), @@ -1279,7 +1279,7 @@ get_token_missing(void) } _token_missing = (PyObject *)PyObject_New( - PyContextTokenMissing, &PyContextTokenMissing_Type); + PyContextTokenMissing, &_PyContextTokenMissing_Type); if (_token_missing == NULL) { return NULL; } @@ -1323,25 +1323,12 @@ _PyContext_Fini(PyInterpreterState *interp) PyStatus -_PyContext_InitTypes(PyInterpreterState *interp) +_PyContext_Init(PyInterpreterState *interp) { if (!_Py_IsMainInterpreter(interp)) { 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(); if (PyDict_SetItemString( PyContextToken_Type.tp_dict, "MISSING", missing)) diff --git a/Python/hamt.c b/Python/hamt.c index 8c8e025a3ef..cbfe4459d3e 100644 --- a/Python/hamt.c +++ b/Python/hamt.c @@ -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 _PyHamt_Fini(PyInterpreterState *interp) { diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 662e5788183..a53f532e9e2 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -760,7 +760,7 @@ pycore_init_types(PyInterpreterState *interp) return status; } - status = _PyContext_InitTypes(interp); + status = _PyContext_Init(interp); if (_PyStatus_EXCEPTION(status)) { return status; }