# HG changeset patch # User Stefan Behnel # Date 1321633149 -3600 # Node ID 3824b267273a911d80c69eaf5b8a6efe6cf5dce2 # Parent e9ff56a36aeebddc10e135c845815ce4470e8e5e implement __file__ and package context protocol also for module reinitialisation diff -r e9ff56a36aee -r 3824b267273a Python/import.c --- a/Python/import.c Fri Nov 18 17:04:21 2011 +0100 +++ b/Python/import.c Fri Nov 18 17:19:09 2011 +0100 @@ -659,6 +659,9 @@ { PyObject *mod, *mdict; PyModuleDef* def; + PyObject *oldimportcontext; + PyObject *nameascii; + char *oldcontext, *packagecontext; if (extensions == NULL) return NULL; def = (PyModuleDef*)PyDict_GetItem(extensions, filename); @@ -680,7 +683,22 @@ else { if (def->m_base.m_init == NULL) return NULL; + + /* mimic the context feature of _PyImport_LoadDynamicModule() */ + nameascii = PyUnicode_AsEncodedString(name, "ascii", NULL); + if (nameascii == NULL) + return NULL; + oldcontext = _Py_PackageContext; + _Py_PackageContext = PyBytes_AS_STRING(nameascii); + oldimportcontext = _Py_ModuleImportContext; + _Py_ModuleImportContext = filename; + mod = def->m_base.m_init(); + + _Py_PackageContext = oldcontext; + _Py_ModuleImportContext = oldimportcontext; + Py_DECREF(nameascii); + if (mod == NULL) return NULL; PyDict_SetItem(PyImport_GetModuleDict(), name, mod);