diff options
author | Sylvain Thénault <sylvain.thenault@logilab.fr> | 2010-09-10 11:48:20 +0200 |
---|---|---|
committer | Sylvain Thénault <sylvain.thenault@logilab.fr> | 2010-09-10 11:48:20 +0200 |
commit | 629bddb398245c0cc0c8f93b66e835ce7cc6b718 (patch) | |
tree | 9f1bfb3ce2c9fccee931063e26034f7c9d66c3dc | |
parent | 97a1dcea92a20cbf9f80069f81e73fe043d08516 (diff) | |
download | astroid-git-629bddb398245c0cc0c8f93b66e835ce7cc6b718.tar.gz |
fix astng building bug: we've to set module.package flag at the node creation time
otherwise we'll miss this information when infering relative import during
the build process (this should fix for instance some problems with numpy)
--HG--
branch : stable
-rw-r--r-- | _nodes_ast.py | 3 | ||||
-rw-r--r-- | _nodes_compiler.py | 3 | ||||
-rw-r--r-- | builder.py | 3 | ||||
-rw-r--r-- | rebuilder.py | 4 |
4 files changed, 7 insertions, 6 deletions
diff --git a/_nodes_ast.py b/_nodes_ast.py index ebe5263a..4b6767f0 100644 --- a/_nodes_ast.py +++ b/_nodes_ast.py @@ -508,9 +508,10 @@ class TreeRebuilder(RebuildVisitor): newnode.set_line_info(newnode.last_child()) return newnode - def visit_module(self, node, modname): + def visit_module(self, node, modname, package): """visit a Module node by returning a fresh instance of it""" newnode = new.Module(modname, None) + newnode.package = package _lineno_parent(node, newnode, parent=None) _init_set_doc(node, newnode) newnode.body = [self.visit(child, newnode) for child in node.body] diff --git a/_nodes_compiler.py b/_nodes_compiler.py index d504604e..506fbdc2 100644 --- a/_nodes_compiler.py +++ b/_nodes_compiler.py @@ -557,9 +557,10 @@ class TreeRebuilder(RebuildVisitor): newnode.generators = [self.visit(child, newnode) for child in node.quals] return newnode - def visit_module(self, node, modname): + def visit_module(self, node, modname, package): """visit a Module node by returning a fresh instance of it""" newnode = new.Module(modname, node.doc) + newnode.package = package self._set_infos(node, newnode, None) self._remove_nodes = [] # list of ';' Discard nodes to be removed newnode.body = [self.visit(child, newnode) for child in node.node.nodes] @@ -155,8 +155,7 @@ class ASTNGBuilder: package = True else: package = path and path.find('__init__.py') > -1 or False - newnode = self.rebuilder.build(node, modname, node_file) - newnode.package = package + newnode = self.rebuilder.build(node, modname, node_file, package) return newnode # astng from living objects ############################################### diff --git a/rebuilder.py b/rebuilder.py index 063aad7a..d902875e 100644 --- a/rebuilder.py +++ b/rebuilder.py @@ -94,14 +94,14 @@ class RebuildVisitor(object): visit_method = getattr(self, visit_name) return visit_method(node, parent) - def build(self, node, modname, module_file): + def build(self, node, modname, module_file, package): """rebuild the tree starting with an Module node; return an astng.Module node """ self._metaclass = [''] self._global_names = [] self._from_nodes = [] - module = self.visit_module(node, modname) + module = self.visit_module(node, modname, package) module.file = module.path = module_file # init module cache here else we may get some infinite recursion # errors while infering delayed assignments |