diff options
Diffstat (limited to 'Lib/python/pyinit.swg')
-rw-r--r-- | Lib/python/pyinit.swg | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/Lib/python/pyinit.swg b/Lib/python/pyinit.swg index 3541cbafc..212fe1ec8 100644 --- a/Lib/python/pyinit.swg +++ b/Lib/python/pyinit.swg @@ -7,18 +7,18 @@ %init %{ #ifdef __cplusplus -extern "C" { +extern "C" { #endif /* Python-specific SWIG API */ #define SWIG_newvarlink() SWIG_Python_newvarlink() #define SWIG_addvarlink(p, name, get_attr, set_attr) SWIG_Python_addvarlink(p, name, get_attr, set_attr) #define SWIG_InstallConstants(d, constants) SWIG_Python_InstallConstants(d, constants) - + /* ----------------------------------------------------------------------------- * global variable support code. * ----------------------------------------------------------------------------- */ - + typedef struct swig_globalvar { char *name; /* Name of global variable */ PyObject *(*get_attr)(void); /* Return the current value */ @@ -50,6 +50,17 @@ swig_varlink_print(swig_varlinkobject *v, FILE *fp, int flags) { return 0; } +SWIGINTERN void +swig_varlink_delete(swig_varlinkobject *v) { + swig_globalvar *var = v->vars; + while (var) { + swig_globalvar *n = var->next; + free(var->name); + free(var); + var = n; + } +} + SWIGINTERN PyObject * swig_varlink_getattr(swig_varlinkobject *v, char *n) { swig_globalvar *var = v->vars; @@ -92,7 +103,7 @@ swig_varlink_type(void) { (char *)"swigvarlink", /* Type name (tp_name) */ sizeof(swig_varlinkobject), /* Basic size (tp_basicsize) */ 0, /* Itemsize (tp_itemsize) */ - 0, /* Deallocator (tp_dealloc) */ + (destructor) swig_varlink_delete, /* Deallocator (tp_dealloc) */ (printfunc) swig_varlink_print, /* Print (tp_print) */ (getattrfunc) swig_varlink_getattr, /* get attr (tp_getattr) */ (setattrfunc) swig_varlink_setattr, /* Set attr (tp_setattr) */ @@ -162,6 +173,13 @@ SWIG_Python_addvarlink(PyObject *p, char *name, PyObject *(*get_attr)(void), int v->vars = gv; } +SWIGINTERN PyObject * +SWIG_globals() { + static PyObject *_SWIG_globals = 0; + if (!_SWIG_globals) _SWIG_globals = SWIG_newvarlink(); + return _SWIG_globals; +} + /* ----------------------------------------------------------------------------- * constants/methods manipulation * ----------------------------------------------------------------------------- */ @@ -185,6 +203,7 @@ SWIG_Python_InstallConstants(PyObject *d, swig_const_info constants[]) { } if (obj) { PyDict_SetItemString(d, constants[i].name, obj); + Py_DECREF(obj); } } } @@ -233,7 +252,7 @@ SWIG_Python_FixMethods(PyMethodDef *methods, } } } -} +} #ifdef __cplusplus } @@ -247,17 +266,16 @@ SWIG_Python_FixMethods(PyMethodDef *methods, extern "C" #endif SWIGEXPORT void SWIG_init(void) { - static PyObject *SWIG_globals = 0; PyObject *m, *d; - if (!SWIG_globals) SWIG_globals = SWIG_newvarlink(); - + /* Fix SwigMethods to carry the callback ptrs when needed */ SWIG_Python_FixMethods(SwigMethods, swig_const_table, swig_types, swig_type_initial); m = Py_InitModule((char *) SWIG_name, SwigMethods); d = PyModule_GetDict(m); - + SWIG_InitializeModule(0); SWIG_InstallConstants(d,swig_const_table); + %} |