diff options
author | Erlend Egeberg Aasland <erlend.aasland@innova.no> | 2022-07-02 06:24:19 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-07-02 06:24:19 (GMT) |
commit | 3a2e61524faf00657c16a321c880e1191cfdad1e (patch) | |
tree | c0fe2d166655b4714c9c525f2ec593585f28521f /Modules/_json.c | |
parent | 1bc8a38d8b39f87d0d5c7a03b903bf5071732a75 (diff) | |
download | cpython-3a2e61524faf00657c16a321c880e1191cfdad1e.zip cpython-3a2e61524faf00657c16a321c880e1191cfdad1e.tar.gz cpython-3a2e61524faf00657c16a321c880e1191cfdad1e.tar.bz2 |
gh-94393: Remove unneeded module state from _json (#94394)
Diffstat (limited to 'Modules/_json.c')
-rw-r--r-- | Modules/_json.c | 73 |
1 files changed, 15 insertions, 58 deletions
diff --git a/Modules/_json.c b/Modules/_json.c index 9464b9f..89f5504 100644 --- a/Modules/_json.c +++ b/Modules/_json.c @@ -14,19 +14,6 @@ #include "structmember.h" // PyMemberDef #include "pycore_accu.h" -typedef struct { - PyObject *PyScannerType; - PyObject *PyEncoderType; -} _jsonmodulestate; - -static inline _jsonmodulestate* -get_json_state(PyObject *module) -{ - void *state = PyModule_GetState(module); - assert(state != NULL); - return (_jsonmodulestate *)state; -} - typedef struct _PyScannerObject { PyObject_HEAD @@ -1815,70 +1802,40 @@ PyDoc_STRVAR(module_doc, static int _json_exec(PyObject *module) { - _jsonmodulestate *state = get_json_state(module); - - state->PyScannerType = PyType_FromSpec(&PyScannerType_spec); - if (state->PyScannerType == NULL) { + PyObject *PyScannerType = PyType_FromSpec(&PyScannerType_spec); + if (PyScannerType == NULL) { return -1; } - Py_INCREF(state->PyScannerType); - if (PyModule_AddObject(module, "make_scanner", state->PyScannerType) < 0) { - Py_DECREF(state->PyScannerType); + int rc = PyModule_AddObjectRef(module, "make_scanner", PyScannerType); + Py_DECREF(PyScannerType); + if (rc < 0) { return -1; } - state->PyEncoderType = PyType_FromSpec(&PyEncoderType_spec); - if (state->PyEncoderType == NULL) { + PyObject *PyEncoderType = PyType_FromSpec(&PyEncoderType_spec); + if (PyEncoderType == NULL) { return -1; } - Py_INCREF(state->PyEncoderType); - if (PyModule_AddObject(module, "make_encoder", state->PyEncoderType) < 0) { - Py_DECREF(state->PyEncoderType); + rc = PyModule_AddObjectRef(module, "make_encoder", PyEncoderType); + Py_DECREF(PyEncoderType); + if (rc < 0) { return -1; } return 0; } -static int -_jsonmodule_traverse(PyObject *module, visitproc visit, void *arg) -{ - _jsonmodulestate *state = get_json_state(module); - Py_VISIT(state->PyScannerType); - Py_VISIT(state->PyEncoderType); - return 0; -} - -static int -_jsonmodule_clear(PyObject *module) -{ - _jsonmodulestate *state = get_json_state(module); - Py_CLEAR(state->PyScannerType); - Py_CLEAR(state->PyEncoderType); - return 0; -} - -static void -_jsonmodule_free(void *module) -{ - _jsonmodule_clear((PyObject *)module); -} - static PyModuleDef_Slot _json_slots[] = { {Py_mod_exec, _json_exec}, {0, NULL} }; static struct PyModuleDef jsonmodule = { - PyModuleDef_HEAD_INIT, - "_json", - module_doc, - sizeof(_jsonmodulestate), - speedups_methods, - _json_slots, - _jsonmodule_traverse, - _jsonmodule_clear, - _jsonmodule_free, + .m_base = PyModuleDef_HEAD_INIT, + .m_name = "_json", + .m_doc = module_doc, + .m_methods = speedups_methods, + .m_slots = _json_slots, }; PyMODINIT_FUNC |