summaryrefslogtreecommitdiff
path: root/Cython/Compiler/ModuleNode.py
diff options
context:
space:
mode:
authorStefan Behnel <stefan_ml@behnel.de>2012-11-05 22:14:50 +0100
committerStefan Behnel <stefan_ml@behnel.de>2012-11-05 22:14:50 +0100
commit2d2de3696c8fe55b19a03ede8636049f5ce73123 (patch)
tree8b5bf6bc4eaf8362584d74440c52272d9e89e091 /Cython/Compiler/ModuleNode.py
parentd4e00b5c5f6f20d2e835b31a550fe1efcf92fbdc (diff)
downloadcython-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.py9
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,