1.1 --- a/micropython/inspect.py Sat Nov 08 21:47:26 2008 +0100
1.2 +++ b/micropython/inspect.py Sat Nov 08 23:09:48 2008 +0100
1.3 @@ -150,9 +150,9 @@
1.4 del self[name]
1.5
1.6 # Remove unreferenced names.
1.7 - # NOTE: This, due to the nature of the referenced attribute, assumes
1.8 - # NOTE: that only explicitly mentioned classes and functions are
1.9 - # NOTE: employed in the final program.
1.10 + # This, due to the nature of the referenced attribute, assumes
1.11 + # that only explicitly mentioned classes and functions are
1.12 + # employed in the final program.
1.13
1.14 elif self.should_optimise_unused_objects():
1.15
1.16 @@ -526,22 +526,28 @@
1.17
1.18 def visitGetattr(self, node):
1.19 expr = self.dispatch(node.expr)
1.20 + attrname = node.attrname
1.21 +
1.22 if isinstance(expr, Attr):
1.23 value = expr.value
1.24 if isinstance(value, (Class, Module)):
1.25 - attr = value.namespace.get(node.attrname)
1.26 + attr = value.namespace.get(attrname)
1.27 elif isinstance(value, UnresolvedName):
1.28 - attr = UnresolvedName(node.attrname, value.full_name(), self)
1.29 + attr = UnresolvedName(attrname, value.full_name(), self)
1.30 else:
1.31 attr = None
1.32 elif self.builtins is not None:
1.33 - attr = self.builtins.get(node.attrname)
1.34 + attr = self.builtins.get(attrname)
1.35 else:
1.36 - attr = UnresolvedName(node.attrname, value.full_name(), self)
1.37 + attr = UnresolvedName(attrname, value.full_name(), self)
1.38 +
1.39 + # Accounting.
1.40
1.41 if attr is not None:
1.42 attr.set_referenced()
1.43
1.44 + self.importer.use_name(attrname)
1.45 +
1.46 return attr
1.47
1.48 def visitGlobal(self, node):
1.49 @@ -609,6 +615,7 @@
1.50
1.51 def visitName(self, node):
1.52 name = node.name
1.53 +
1.54 if self.importer.predefined_constants.has_key(name):
1.55 attr = self.importer.get_predefined_constant(name)
1.56 elif self.namespaces and self.namespaces[-1].has_key(name):
1.57 @@ -620,9 +627,13 @@
1.58 else:
1.59 attr = None
1.60
1.61 + # Accounting.
1.62 +
1.63 if attr is not None:
1.64 attr.set_referenced()
1.65
1.66 + self.importer.use_name(name)
1.67 +
1.68 return attr
1.69
1.70 visitNot = OP