1.1 --- a/micropython/__init__.py Sat Jul 11 01:18:53 2009 +0200
1.2 +++ b/micropython/__init__.py Sat Jul 11 02:21:09 2009 +0200
1.3 @@ -446,7 +446,8 @@
1.4 # Include names which may not be explicitly used in programs.
1.5 # NOTE: Potentially declare these when inspecting.
1.6
1.7 - self.names_used = set(["__init__", "__call__", "__bool__"])
1.8 + self.names_used = None
1.9 + self.name_references = {}
1.10
1.11 # Status information.
1.12
1.13 @@ -498,11 +499,32 @@
1.14
1.15 # Name accounting.
1.16
1.17 - def use_name(self, name):
1.18 + def use_name(self, name, from_name):
1.19 +
1.20 + """
1.21 + Register the given 'name' as being used in the program from within an
1.22 + object with the specified 'from_name'.
1.23 + """
1.24 +
1.25 + if not self.name_references.has_key(from_name):
1.26 + self.name_references[from_name] = set()
1.27 + self.name_references[from_name].add(name)
1.28 +
1.29 + def uses_name(self, name):
1.30
1.31 - "Register the given 'name' as being used in the program."
1.32 + "Return whether the given 'name' is used."
1.33 +
1.34 + if self.names_used is None:
1.35 + self.names_used = set(["__init__", "__call__", "__bool__"])
1.36 + self._collect_names("__main__")
1.37
1.38 - self.names_used.add(name)
1.39 + return name in self.names_used
1.40 +
1.41 + def _collect_names(self, from_name):
1.42 + for name in self.name_references.get(from_name, []):
1.43 + if name not in self.names_used:
1.44 + self.names_used.add(name)
1.45 + self._collect_names(name)
1.46
1.47 # Constant accounting.
1.48