mirror of https://github.com/python/cpython
gh-94393: Remove unneeded module state from _json (#94394)
This commit is contained in:
parent
1bc8a38d8b
commit
3a2e61524f
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue