always insert the module into sys.modules right after creating it in Py3 (Py2 does...
authorStefan Behnel <stefan_ml@behnel.de>
Sat, 3 Nov 2012 22:21:02 +0000 (23:21 +0100)
committerStefan Behnel <stefan_ml@behnel.de>
Sat, 3 Nov 2012 22:21:02 +0000 (23:21 +0100)
--HG--
extra : transplant_source : %F9%FF%8Ai%99OV%BFd%F7%147%19pm%5D%DF%98%D4%FC

Cython/Compiler/ModuleNode.py

index e98629e..a84ec86 100644 (file)
@@ -2090,16 +2090,17 @@ class ModuleNode(Nodes.Node, Nodes.BlockNode):
                 Naming.pymoduledef_cname))
         code.putln("#endif")
         code.putln(code.error_goto_if_null(env.module_cname, self.pos))
-        if env.is_package:
-            # CPython may not have put us into sys.modules yet, but relative imports require it
-            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.module_name)
-            code.putln(code.error_goto_if_neg('PyDict_SetItemString(modules, "%s", %s)' % (
-                env.module_name, env.module_cname), self.pos))
-            code.putln("}")
-            code.putln("}")
+        # CPython may not have put us into sys.modules yet, but relative imports and reimports require it
+        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.module_name)
+        code.putln(code.error_goto_if_neg('PyDict_SetItemString(modules, "%s", %s)' % (
+            env.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,