@@ -856,7 +856,7 @@ module_dict_for_exec(PyObject *name)
856856 }
857857 }
858858
859- return d ;
859+ return d ; /* Return a borrowed reference. */
860860}
861861
862862static PyObject *
@@ -888,33 +888,25 @@ PyObject*
888888PyImport_ExecCodeModuleObject (PyObject * name , PyObject * co , PyObject * pathname ,
889889 PyObject * cpathname )
890890{
891- PyObject * d , * v ;
891+ PyObject * d , * res ;
892+ PyInterpreterState * interp = PyThreadState_GET ()-> interp ;
893+ _Py_IDENTIFIER (_fix_up_module );
892894
893895 d = module_dict_for_exec (name );
894896 if (d == NULL ) {
895897 return NULL ;
896898 }
897899
898- if (pathname ! = NULL ) {
899- v = pathname ;
900+ if (pathname = = NULL ) {
901+ pathname = (( PyCodeObject * ) co ) -> co_filename ;
900902 }
901- else {
902- v = ((PyCodeObject * )co )-> co_filename ;
903+ res = _PyObject_CallMethodIdObjArgs (interp -> importlib ,
904+ & PyId__fix_up_module ,
905+ d , name , pathname , cpathname , NULL );
906+ if (res != NULL ) {
907+ res = exec_code_in_module (name , d , co );
903908 }
904- Py_INCREF (v );
905- if (PyDict_SetItemString (d , "__file__" , v ) != 0 )
906- PyErr_Clear (); /* Not important enough to report */
907- Py_DECREF (v );
908-
909- /* Remember the pyc path name as the __cached__ attribute. */
910- if (cpathname != NULL )
911- v = cpathname ;
912- else
913- v = Py_None ;
914- if (PyDict_SetItemString (d , "__cached__" , v ) != 0 )
915- PyErr_Clear (); /* Not important enough to report */
916-
917- return exec_code_in_module (name , d , co );
909+ return res ;
918910}
919911
920912
0 commit comments