[Python-checkins] gh-94393: Remove unneeded module state from _json (#94394)

erlend-aasland webhook-mailer at python.org
Sat Jul 2 02:24:24 EDT 2022


https://github.com/python/cpython/commit/3a2e61524faf00657c16a321c880e1191cfdad1e
commit: 3a2e61524faf00657c16a321c880e1191cfdad1e
branch: main
author: Erlend Egeberg Aasland <erlend.aasland at innova.no>
committer: erlend-aasland <erlend.aasland at protonmail.com>
date: 2022-07-02T08:24:19+02:00
summary:

gh-94393: Remove unneeded module state from _json (#94394)

files:
M Modules/_json.c

diff --git a/Modules/_json.c b/Modules/_json.c
index 9464b9f498ede..89f55047abe42 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



More information about the Python-checkins mailing list