diff options
author | Stefan Behnel <stefan_ml@behnel.de> | 2012-11-05 22:14:50 +0100 |
---|---|---|
committer | Stefan Behnel <stefan_ml@behnel.de> | 2012-11-05 22:14:50 +0100 |
commit | 2d2de3696c8fe55b19a03ede8636049f5ce73123 (patch) | |
tree | 8b5bf6bc4eaf8362584d74440c52272d9e89e091 /Cython/Compiler/ModuleNode.py | |
parent | d4e00b5c5f6f20d2e835b31a550fe1efcf92fbdc (diff) | |
download | cython-2d2de3696c8fe55b19a03ede8636049f5ce73123.tar.gz |
fix initial module registration for (nested) packages
--HG--
extra : transplant_source : 1%92%CA%A14x%08H%1D%3A%F3z%E7%E22%BF%CA%D2%1B%10
Diffstat (limited to 'Cython/Compiler/ModuleNode.py')
-rw-r--r-- | Cython/Compiler/ModuleNode.py | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/Cython/Compiler/ModuleNode.py b/Cython/Compiler/ModuleNode.py index 6778e2e8b..9b605fe9a 100644 --- a/Cython/Compiler/ModuleNode.py +++ b/Cython/Compiler/ModuleNode.py @@ -2090,17 +2090,22 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode): Naming.pymoduledef_cname)) code.putln("#endif") code.putln(code.error_goto_if_null(env.module_cname, self.pos)) + # CPython may not have put us into sys.modules yet, but relative imports and reimports require it + fq_module_name = env.qualified_name + if fq_module_name.endswith('.__init__'): + fq_module_name = fq_module_name[:-len('.__init__')] code.putln("#if PY_MAJOR_VERSION >= 3") code.putln("{") code.putln("PyObject *modules = PyImport_GetModuleDict(); %s" % code.error_goto_if_null("modules", self.pos)) - code.putln('if (!PyDict_GetItemString(modules, "%s")) {' % env.qualified_name) + code.putln('if (!PyDict_GetItemString(modules, "%s")) {' % fq_module_name) code.putln(code.error_goto_if_neg('PyDict_SetItemString(modules, "%s", %s)' % ( - env.qualified_name, env.module_cname), self.pos)) + fq_module_name, env.module_cname), self.pos)) code.putln("}") code.putln("}") code.putln("#endif") + code.putln( '%s = PyImport_AddModule(__Pyx_NAMESTR(__Pyx_BUILTIN_MODULE_NAME)); %s' % ( Naming.builtins_cname, |