From b091fe6559221dd92672e082ab7b9564f36825e0 Mon Sep 17 00:00:00 2001 From: Craig Citro Date: Wed, 7 Jul 2010 00:20:50 -0700 Subject: [PATCH] Correctly resolve imports of modules already cimported. --- Cython/Compiler/Nodes.py | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/Cython/Compiler/Nodes.py b/Cython/Compiler/Nodes.py index 0f9c3e43..55b57562 100644 --- a/Cython/Compiler/Nodes.py +++ b/Cython/Compiler/Nodes.py @@ -4988,17 +4988,26 @@ class FromImportStatNode(StatNode): break else: entry = env.lookup(target.name) - if (entry.is_type and - entry.type.name == name and - entry.type.module_name == self.module.module_name.value): - continue # already cimported + # check whether or not entry is already cimported + if (entry.is_type and entry.type.name == name + and hasattr(entry.type, 'module_name')): + if entry.type.module_name == self.module.module_name.value: + # cimported with absolute name + continue + try: + # cimported with relative name + module = env.find_module(self.module.module_name.value, + pos=None) + if entry.type.module_name == module.qualified_name: + continue + except AttributeError: + pass target.analyse_target_expression(env, None) if target.type is py_object_type: coerced_item = None else: coerced_item = self.item.coerce_to(target.type, env) - self.interned_items.append( - (name, target, coerced_item)) + self.interned_items.append((name, target, coerced_item)) def generate_execution_code(self, code): self.module.generate_evaluation_code(code) -- 2.26.2