@@ -169,24 +169,35 @@ PyModule_GetDict(PyObject *m)
169169 return d ;
170170}
171171
172- const char *
173- PyModule_GetName (PyObject * m )
172+ PyObject *
173+ PyModule_GetNameObject (PyObject * m )
174174{
175175 PyObject * d ;
176- PyObject * nameobj ;
176+ PyObject * name ;
177177 if (!PyModule_Check (m )) {
178178 PyErr_BadArgument ();
179179 return NULL ;
180180 }
181181 d = ((PyModuleObject * )m )-> md_dict ;
182182 if (d == NULL ||
183- (nameobj = PyDict_GetItemString (d , "__name__" )) == NULL ||
184- !PyUnicode_Check (nameobj ))
183+ (name = PyDict_GetItemString (d , "__name__" )) == NULL ||
184+ !PyUnicode_Check (name ))
185185 {
186186 PyErr_SetString (PyExc_SystemError , "nameless module" );
187187 return NULL ;
188188 }
189- return _PyUnicode_AsString (nameobj );
189+ Py_INCREF (name );
190+ return name ;
191+ }
192+
193+ const char *
194+ PyModule_GetName (PyObject * m )
195+ {
196+ PyObject * name = PyModule_GetNameObject (m );
197+ if (name == NULL )
198+ return NULL ;
199+ Py_DECREF (name ); /* module dict has still a reference */
200+ return _PyUnicode_AsString (name );
190201}
191202
192203PyObject *
@@ -219,7 +230,7 @@ PyModule_GetFilename(PyObject *m)
219230 if (fileobj == NULL )
220231 return NULL ;
221232 utf8 = _PyUnicode_AsString (fileobj );
222- Py_DECREF (fileobj );
233+ Py_DECREF (fileobj ); /* module dict has still a reference */
223234 return utf8 ;
224235}
225236
@@ -347,21 +358,25 @@ module_dealloc(PyModuleObject *m)
347358static PyObject *
348359module_repr (PyModuleObject * m )
349360{
350- const char * name ;
351- PyObject * filename , * repr ;
361+ PyObject * name , * filename , * repr ;
352362
353- name = PyModule_GetName ((PyObject * )m );
363+ name = PyModule_GetNameObject ((PyObject * )m );
354364 if (name == NULL ) {
355365 PyErr_Clear ();
356- name = "?" ;
366+ name = PyUnicode_FromStringAndSize ("?" , 1 );
367+ if (name == NULL )
368+ return NULL ;
357369 }
358370 filename = PyModule_GetFilenameObject ((PyObject * )m );
359371 if (filename == NULL ) {
360372 PyErr_Clear ();
361- return PyUnicode_FromFormat ("<module '%s' (built-in)>" , name );
373+ repr = PyUnicode_FromFormat ("<module %R (built-in)>" , name );
374+ }
375+ else {
376+ repr = PyUnicode_FromFormat ("<module %R from %R>" , name , filename );
377+ Py_DECREF (filename );
362378 }
363- repr = PyUnicode_FromFormat ("<module '%s' from '%U'>" , name , filename );
364- Py_DECREF (filename );
379+ Py_DECREF (name );
365380 return repr ;
366381}
367382
0 commit comments