1.1 --- a/annotate.py Sat Dec 09 00:36:06 2006 +0100
1.2 +++ b/annotate.py Sat Dec 09 02:16:20 2006 +0100
1.3 @@ -387,7 +387,7 @@
1.4 and storing details on the node.
1.5 """
1.6
1.7 - module = self.importer.load(import_.name, self.builtins)
1.8 + module = self.importer.load(import_.name, self.builtins, getattr(import_, "alias", None))
1.9 if module is not None:
1.10 self.namespace.set_types([module])
1.11 else:
1.12 @@ -1329,7 +1329,7 @@
1.13 """
1.14
1.15 self.path = path or [os.getcwd()]
1.16 - self.modules = []
1.17 + self.modules = {}
1.18
1.19 def find_in_path(self, name):
1.20
1.21 @@ -1405,7 +1405,7 @@
1.22 else:
1.23 return None
1.24
1.25 - def load(self, name, builtins):
1.26 + def load(self, name, builtins, alias=None):
1.27
1.28 """
1.29 Load the module or package with the given 'name' and using the specified
1.30 @@ -1418,24 +1418,30 @@
1.31 if not m:
1.32 return None # NOTE: Import error.
1.33 d, filename = m
1.34 - module = load(filename, builtins)
1.35 - self.modules.append(module)
1.36 + top = module = self.modules.get(path[0], load(filename, builtins, path[0], self))
1.37 + self.modules[path[0]] = module
1.38
1.39 if len(path) > 1:
1.40 + path_so_far = path[:1]
1.41 for p in path[1:]:
1.42 + path_so_far.append(p)
1.43 m = self.find(d, p)
1.44 if not m:
1.45 return None # NOTE: Import error.
1.46 d, filename = m
1.47 - submodule = load(filename, builtins)
1.48 - self.modules.append(submodule)
1.49 + module_name = ".".join(path_so_far)
1.50 + submodule = self.modules.get(module_name, load(filename, builtins, module_name, self))
1.51 + self.modules[module_name] = submodule
1.52
1.53 # Store the submodule within its parent module.
1.54
1.55 module.namespace[p] = [Attribute(None, submodule)]
1.56 module = submodule
1.57
1.58 - return Attribute(None, module)
1.59 + if alias:
1.60 + return Attribute(None, module)
1.61 + else:
1.62 + return Attribute(None, top)
1.63
1.64 def combine(target, additions):
1.65
1.66 @@ -1529,7 +1535,7 @@
1.67
1.68 # Convenience functions.
1.69
1.70 -def load(name, builtins=None, importer=None):
1.71 +def load(name, builtins=None, module_name=None, importer=None):
1.72
1.73 """
1.74 Load the module with the given 'name' (which may be a full module path),
1.75 @@ -1537,7 +1543,7 @@
1.76 optional 'importer' to provide a means of finding and loading modules.
1.77 """
1.78
1.79 - module = simplify.simplify(name, builtins is None)
1.80 + module = simplify.simplify(name, builtins is None, module_name)
1.81 fixnames.fix(module, builtins)
1.82 annotate(module, builtins, importer)
1.83 return module