1.1 --- a/annotate.py Fri Feb 23 00:12:44 2007 +0100
1.2 +++ b/annotate.py Fri Feb 23 01:29:50 2007 +0100
1.3 @@ -892,6 +892,9 @@
1.4 try_.finally_ = self.dispatches(try_.finally_)
1.5 return try_
1.6
1.7 + def visitYield(self, yield_):
1.8 + raise NotImplementedError, "The yield statement is not currently supported."
1.9 +
1.10 # Utility methods.
1.11
1.12 def get_builtin_instances(self, node, name):
1.13 @@ -1539,13 +1542,20 @@
1.14 package, or None if no such module or package exists.
1.15 """
1.16
1.17 + if self.modules.has_key(name):
1.18 + return Attribute(None, self.modules[name])
1.19 +
1.20 path = name.split(".")
1.21 m = self.find_in_path(path[0])
1.22 if not m:
1.23 return None # NOTE: Import error.
1.24 d, filename = m
1.25 - top = module = self.modules.get(path[0], load(filename, builtins, path[0], self))
1.26 - self.modules[path[0]] = module
1.27 +
1.28 + if self.modules.has_key(path[0]):
1.29 + top = module = self.modules[path[0]]
1.30 + else:
1.31 + top = module = self.modules[path[0]] = load(filename, builtins, path[0], self, no_annotate=1)
1.32 + annotate(module, builtins, self)
1.33
1.34 if len(path) > 1:
1.35 path_so_far = path[:1]
1.36 @@ -1556,8 +1566,12 @@
1.37 return None # NOTE: Import error.
1.38 d, filename = m
1.39 module_name = ".".join(path_so_far)
1.40 - submodule = self.modules.get(module_name, load(filename, builtins, module_name, self))
1.41 - self.modules[module_name] = submodule
1.42 +
1.43 + if self.modules.has_key(module_name):
1.44 + submodule = self.modules[module_name]
1.45 + else:
1.46 + submodule = self.modules[module_name] = load(filename, builtins, module_name, self, no_annotate=1)
1.47 + annotate(submodule, builtins, self)
1.48
1.49 # Store the submodule within its parent module.
1.50
1.51 @@ -1670,7 +1684,7 @@
1.52
1.53 # Convenience functions.
1.54
1.55 -def load(name, builtins=None, module_name=None, importer=None):
1.56 +def load(name, builtins=None, module_name=None, importer=None, no_annotate=0):
1.57
1.58 """
1.59 Load the module with the given 'name' (which may be a full module path),
1.60 @@ -1680,7 +1694,8 @@
1.61
1.62 module = simplify.simplify(name, builtins is None, module_name)
1.63 fixnames.fix(module, builtins)
1.64 - annotate(module, builtins, importer)
1.65 + if not no_annotate:
1.66 + annotate(module, builtins, importer)
1.67 return module
1.68
1.69 def annotate(module, builtins=None, importer=None):