summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorErlend Egeberg Aasland <erlend.aasland@innova.no>2022-07-02 06:24:19 (GMT)
committerGitHub <noreply@github.com>2022-07-02 06:24:19 (GMT)
commit3a2e61524faf00657c16a321c880e1191cfdad1e (patch)
treec0fe2d166655b4714c9c525f2ec593585f28521f
parent1bc8a38d8b39f87d0d5c7a03b903bf5071732a75 (diff)
downloadcpython-3a2e61524faf00657c16a321c880e1191cfdad1e.zip
cpython-3a2e61524faf00657c16a321c880e1191cfdad1e.tar.gz
cpython-3a2e61524faf00657c16a321c880e1191cfdad1e.tar.bz2
gh-94393: Remove unneeded module state from _json (#94394)
-rw-r--r--Modules/_json.c73
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