Skip to content

Commit ad1a593

Browse files
Anselm KruisAnselm Kruis
authored andcommitted
Stackless issue python#152: Eliminate the variable types_mod.
It was only used during module initialization.
1 parent a20e25c commit ad1a593

File tree

1 file changed

+29
-32
lines changed

1 file changed

+29
-32
lines changed

Stackless/pickling/prickelpit.c

Lines changed: 29 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,6 @@ static struct _typeobject wrap_##type = { \
191191
0, /* tp_free */ \
192192
};
193193

194-
static PyObject *types_mod = NULL;
195194
static PyObject *reduce_frame_func = NULL;
196195

197196
PyDoc_STRVAR(set_reduce_frame__doc__,
@@ -292,7 +291,7 @@ static struct PyMethodDef _new_methoddef[] = {
292291
{0}
293292
};
294293

295-
static int init_type(PyTypeObject *t, int (*initchain)(void))
294+
static int init_type(PyTypeObject *t, int (*initchain)(PyObject *), PyObject * mod)
296295
{
297296
PyMethodDescrObject *reduce;
298297
PyWrapperDescrObject *init;
@@ -305,7 +304,7 @@ static int init_type(PyTypeObject *t, int (*initchain)(void))
305304
t->tp_basicsize = t->tp_base->tp_basicsize;
306305
t->tp_itemsize = t->tp_base->tp_itemsize;
307306
t->tp_flags = t->tp_base->tp_flags & ~Py_TPFLAGS_READY;
308-
if (PyObject_SetAttrString(types_mod, name, (PyObject *) t))
307+
if (PyObject_SetAttrString(mod, name, (PyObject *) t))
309308
return -1;
310309
/* patch the method descriptors to require the base type */
311310
if (PyType_Ready(t)) return -1;
@@ -320,7 +319,7 @@ static int init_type(PyTypeObject *t, int (*initchain)(void))
320319
if (func == NULL || PyDict_SetItemString(t->tp_dict, "__new__", func))
321320
return -1;
322321
if (initchain != NULL)
323-
return initchain();
322+
return initchain(mod);
324323
return 0;
325324
}
326325

@@ -648,9 +647,9 @@ code_reduce(PyCodeObject * co)
648647
MAKE_WRAPPERTYPE(PyCode_Type, code, "code", code_reduce, generic_new,
649648
generic_setstate)
650649

651-
static int init_codetype(void)
650+
static int init_codetype(PyObject * mod)
652651
{
653-
return init_type(&wrap_PyCode_Type, initchain);
652+
return init_type(&wrap_PyCode_Type, initchain, mod);
654653
}
655654
#undef initchain
656655
#define initchain init_codetype
@@ -724,9 +723,9 @@ cell_setstate(PyObject *self, PyObject *args)
724723

725724
MAKE_WRAPPERTYPE(PyCell_Type, cell, "cell", cell_reduce, cell_new, cell_setstate)
726725

727-
static int init_celltype(void)
726+
static int init_celltype(PyObject * mod)
728727
{
729-
return init_type(&wrap_PyCell_Type, initchain);
728+
return init_type(&wrap_PyCell_Type, initchain, mod);
730729
}
731730
#undef initchain
732731
#define initchain init_celltype
@@ -816,9 +815,9 @@ func_setstate(PyObject *self, PyObject *args)
816815
MAKE_WRAPPERTYPE(PyFunction_Type, func, "function", func_reduce, func_new,
817816
func_setstate)
818817

819-
static int init_functype(void)
818+
static int init_functype(PyObject * mod)
820819
{
821-
return init_type(&wrap_PyFunction_Type, initchain);
820+
return init_type(&wrap_PyFunction_Type, initchain, mod);
822821
}
823822
#undef initchain
824823
#define initchain init_functype
@@ -1188,7 +1187,7 @@ slp_ensure_new_frame(PyFrameObject *f)
11881187

11891188
MAKE_WRAPPERTYPE(PyFrame_Type, frame, "frame", frameobject_reduce, frame_new, frame_setstate)
11901189

1191-
static int init_frametype(void)
1190+
static int init_frametype(PyObject * mod)
11921191
{
11931192
return slp_register_execute(&PyFrame_Type, "eval_frame",
11941193
PyEval_EvalFrameEx_slp, REF_INVALID_EXEC(eval_frame))
@@ -1208,7 +1207,7 @@ static int init_frametype(void)
12081207
slp_restore_tracing, REF_INVALID_EXEC(slp_restore_tracing))
12091208
|| slp_register_execute(&PyCFrame_Type, "slp_tp_init_callback",
12101209
slp_tp_init_callback, REF_INVALID_EXEC(slp_tp_init_callback))
1211-
|| init_type(&wrap_PyFrame_Type, initchain);
1210+
|| init_type(&wrap_PyFrame_Type, initchain, mod);
12121211
}
12131212
#undef initchain
12141213
#define initchain init_frametype
@@ -1311,9 +1310,9 @@ tb_setstate(PyObject *self, PyObject *args)
13111310

13121311
MAKE_WRAPPERTYPE(PyTraceBack_Type, tb, "traceback", tb_reduce, tb_new, tb_setstate)
13131312

1314-
static int init_tracebacktype(void)
1313+
static int init_tracebacktype(PyObject * mod)
13151314
{
1316-
return init_type(&wrap_PyTraceBack_Type, initchain);
1315+
return init_type(&wrap_PyTraceBack_Type, initchain, mod);
13171316
}
13181317
#undef initchain
13191318
#define initchain init_tracebacktype
@@ -1395,9 +1394,9 @@ module_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
13951394

13961395
MAKE_WRAPPERTYPE(PyModule_Type, module, "module", module_reduce, module_new, generic_setstate)
13971396

1398-
static int init_moduletype(void)
1397+
static int init_moduletype(PyObject * mod)
13991398
{
1400-
return init_type(&wrap_PyModule_Type, initchain);
1399+
return init_type(&wrap_PyModule_Type, initchain, mod);
14011400
}
14021401
#undef initchain
14031402
#define initchain init_moduletype
@@ -1483,29 +1482,29 @@ dictitemsview_reduce(_PyDictViewObject *di)
14831482
MAKE_WRAPPERTYPE(PyDictKeys_Type, dictkeysview, "dict_keys",
14841483
dictkeysview_reduce, dictview_new, generic_setstate)
14851484

1486-
static int init_dictkeysviewtype(void)
1485+
static int init_dictkeysviewtype(PyObject * mod)
14871486
{
1488-
return init_type(&wrap_PyDictKeys_Type, initchain);
1487+
return init_type(&wrap_PyDictKeys_Type, initchain, mod);
14891488
}
14901489
#undef initchain
14911490
#define initchain init_dictkeysviewtype
14921491

14931492
MAKE_WRAPPERTYPE(PyDictValues_Type, dictvaluesview, "dict_values",
14941493
dictvaluesview_reduce, dictview_new, generic_setstate)
14951494

1496-
static int init_dictvaluesviewtype(void)
1495+
static int init_dictvaluesviewtype(PyObject * mod)
14971496
{
1498-
return init_type(&wrap_PyDictValues_Type, initchain);
1497+
return init_type(&wrap_PyDictValues_Type, initchain, mod);
14991498
}
15001499
#undef initchain
15011500
#define initchain init_dictvaluesviewtype
15021501

15031502
MAKE_WRAPPERTYPE(PyDictItems_Type, dictitemsview, "dict_items",
15041503
dictitemsview_reduce, dictview_new, generic_setstate)
15051504

1506-
static int init_dictitemsviewtype(void)
1505+
static int init_dictitemsviewtype(PyObject * mod)
15071506
{
1508-
return init_type(&wrap_PyDictItems_Type, initchain);
1507+
return init_type(&wrap_PyDictItems_Type, initchain, mod);
15091508
}
15101509
#undef initchain
15111510
#define initchain init_dictitemsviewtype
@@ -1811,7 +1810,7 @@ MAKE_WRAPPERTYPE(PyGen_Type, gen, "generator", gen_reduce,
18111810

18121811
DEF_INVALID_EXEC(gen_iternext_callback)
18131812

1814-
static int init_generatortype(void)
1813+
static int init_generatortype(PyObject * mod)
18151814
{
18161815
int res;
18171816
PyGenObject *gen = (PyGenObject *) run_script(
@@ -1826,7 +1825,7 @@ static int init_generatortype(void)
18261825
res = slp_register_execute(Py_TYPE(cbframe), "gen_iternext_callback",
18271826
gen->gi_frame->f_back->f_execute,
18281827
REF_INVALID_EXEC(gen_iternext_callback))
1829-
|| init_type(&wrap_PyGen_Type, initchain);
1828+
|| init_type(&wrap_PyGen_Type, initchain, mod);
18301829

18311830
assert(gen_exhausted_frame == NULL);
18321831
gen_exhausted_frame = slp_ensure_new_frame(gen->gi_frame);
@@ -1849,9 +1848,9 @@ coro_reduce(PyGenObject *gen)
18491848
MAKE_WRAPPERTYPE(PyCoro_Type, coro, "coroutine", coro_reduce,
18501849
gen_new, gen_setstate)
18511850

1852-
static int init_coroutinetype(void)
1851+
static int init_coroutinetype(PyObject * mod)
18531852
{
1854-
return init_type(&wrap_PyCoro_Type, initchain);
1853+
return init_type(&wrap_PyCoro_Type, initchain, mod);
18551854
}
18561855
#undef initchain
18571856
#define initchain init_coroutinetype
@@ -1990,15 +1989,13 @@ init_prickelpit(void)
19901989
{
19911990
PyObject *tmp;
19921991

1993-
types_mod = PyModule_Create(&_wrapmodule);
1994-
if (types_mod == NULL)
1992+
tmp = PyModule_Create(&_wrapmodule);
1993+
if (tmp == NULL)
19951994
return NULL;
1996-
if (initchain()) {
1997-
Py_CLEAR(types_mod);
1995+
if (initchain(tmp)) {
1996+
Py_CLEAR(tmp);
19981997
return NULL;
19991998
}
2000-
tmp = types_mod;
2001-
types_mod = NULL;
20021999
return tmp;
20032000
}
20042001

0 commit comments

Comments
 (0)