@@ -130,6 +130,34 @@ check_api_version(const char *name, int module_api_version)
130130 return 1 ;
131131}
132132
133+ static int
134+ _add_methods_to_object (PyObject * module , PyObject * name , PyMethodDef * functions )
135+ {
136+ PyObject * func ;
137+ PyMethodDef * fdef ;
138+
139+ for (fdef = functions ; fdef -> ml_name != NULL ; fdef ++ ) {
140+ if ((fdef -> ml_flags & METH_CLASS ) ||
141+ (fdef -> ml_flags & METH_STATIC )) {
142+ PyErr_SetString (PyExc_ValueError ,
143+ "module functions cannot set"
144+ " METH_CLASS or METH_STATIC" );
145+ return -1 ;
146+ }
147+ func = PyCFunction_NewEx (fdef , (PyObject * )module , name );
148+ if (func == NULL ) {
149+ return -1 ;
150+ }
151+ if (PyObject_SetAttrString (module , fdef -> ml_name , func ) != 0 ) {
152+ Py_DECREF (func );
153+ return -1 ;
154+ }
155+ Py_DECREF (func );
156+ }
157+
158+ return 0 ;
159+ }
160+
133161PyObject *
134162PyModule_Create2 (struct PyModuleDef * module , int module_api_version )
135163{
@@ -269,7 +297,7 @@ PyModule_FromDefAndSpec2(struct PyModuleDef* def, PyObject *spec, int module_api
269297 }
270298 }
271299 } else {
272- m = PyModule_New ( name );
300+ m = PyModule_NewObject ( nameobj );
273301 if (m == NULL ) {
274302 goto error ;
275303 }
@@ -297,7 +325,7 @@ PyModule_FromDefAndSpec2(struct PyModuleDef* def, PyObject *spec, int module_api
297325 }
298326
299327 if (def -> m_methods != NULL ) {
300- ret = PyModule_AddFunctions ( m , def -> m_methods );
328+ ret = _add_methods_to_object ( m , nameobj , def -> m_methods );
301329 if (ret != 0 ) {
302330 goto error ;
303331 }
@@ -331,7 +359,7 @@ PyModule_ExecDef(PyObject *module, PyModuleDef *def)
331359 return -1 ;
332360 }
333361
334- if (PyModule_Check ( module ) && def -> m_size >= 0 ) {
362+ if (def -> m_size >= 0 ) {
335363 PyModuleObject * md = (PyModuleObject * )module ;
336364 if (md -> md_state == NULL ) {
337365 /* Always set a state pointer; this serves as a marker to skip
@@ -387,37 +415,15 @@ PyModule_ExecDef(PyObject *module, PyModuleDef *def)
387415int
388416PyModule_AddFunctions (PyObject * m , PyMethodDef * functions )
389417{
390- PyObject * name , * func ;
391- PyMethodDef * fdef ;
392-
393- name = PyModule_GetNameObject (m );
418+ int res ;
419+ PyObject * name = PyModule_GetNameObject (m );
394420 if (name == NULL ) {
395421 return -1 ;
396422 }
397423
398- for (fdef = functions ; fdef -> ml_name != NULL ; fdef ++ ) {
399- if ((fdef -> ml_flags & METH_CLASS ) ||
400- (fdef -> ml_flags & METH_STATIC )) {
401- PyErr_SetString (PyExc_ValueError ,
402- "module functions cannot set"
403- " METH_CLASS or METH_STATIC" );
404- Py_DECREF (name );
405- return -1 ;
406- }
407- func = PyCFunction_NewEx (fdef , (PyObject * )m , name );
408- if (func == NULL ) {
409- Py_DECREF (name );
410- return -1 ;
411- }
412- if (PyObject_SetAttrString (m , fdef -> ml_name , func ) != 0 ) {
413- Py_DECREF (func );
414- Py_DECREF (name );
415- return -1 ;
416- }
417- Py_DECREF (func );
418- }
424+ res = _add_methods_to_object (m , name , functions );
419425 Py_DECREF (name );
420- return 0 ;
426+ return res ;
421427}
422428
423429int
0 commit comments