1.1 --- a/micropython/inspect.py Sat Jul 11 01:18:53 2009 +0200
1.2 +++ b/micropython/inspect.py Sat Jul 11 02:21:09 2009 +0200
1.3 @@ -228,7 +228,7 @@
1.4 # particular attribute and are unreferenced.
1.5
1.6 if obj_was_removed and isinstance(attr.get_value(), Function) and attr.get_value().is_method() or \
1.7 - name not in self.importer.names_used and \
1.8 + not self.importer.uses_name(name) and \
1.9 attr.assignments == 1 and isinstance(attr.get_value(), Function) and \
1.10 attr.get_value().is_method() and not attr.get_value().referenced:
1.11
1.12 @@ -317,6 +317,13 @@
1.13
1.14 return (self.namespaces[-1:] or [self])[0]
1.15
1.16 + def use_name(self, name):
1.17 +
1.18 + "Use the given 'name' within the current namespace/unit."
1.19 +
1.20 + unit = self.get_parent()
1.21 + self.importer.use_name(name, unit.name)
1.22 +
1.23 # Visitor methods.
1.24
1.25 def default(self, node, *args):
1.26 @@ -340,7 +347,7 @@
1.27 "Accounting method for the unary operator 'node'."
1.28
1.29 method = unary_methods[node.__class__.__name__]
1.30 - self.importer.use_name(method)
1.31 + self.use_name(method)
1.32 return self.OP(node)
1.33
1.34 def _visitBinary(self, node):
1.35 @@ -348,8 +355,8 @@
1.36 "Accounting method for the binary operator 'node'."
1.37
1.38 left_method, right_method = binary_methods[node.__class__.__name__]
1.39 - self.importer.use_name(left_method)
1.40 - self.importer.use_name(right_method)
1.41 + self.use_name(left_method)
1.42 + self.use_name(right_method)
1.43 return self.OP(node)
1.44
1.45 def _visitFunction(self, node, name):
1.46 @@ -454,7 +461,7 @@
1.47
1.48 # Declare names which will be used by generated code.
1.49
1.50 - self.importer.use_name("__getitem__")
1.51 + self.use_name("__getitem__")
1.52
1.53 # Process the assignment.
1.54
1.55 @@ -474,9 +481,9 @@
1.56 # Accounting.
1.57
1.58 aug_method, (left_method, right_method) = augassign_methods[node.op]
1.59 - self.importer.use_name(aug_method)
1.60 - self.importer.use_name(left_method)
1.61 - self.importer.use_name(right_method)
1.62 + self.use_name(aug_method)
1.63 + self.use_name(left_method)
1.64 + self.use_name(right_method)
1.65
1.66 # Process the assignment.
1.67
1.68 @@ -567,10 +574,10 @@
1.69 op_name, next_node = op
1.70 methods = comparison_methods[op_name]
1.71 if methods is not None:
1.72 - self.importer.use_name(methods[0])
1.73 - self.importer.use_name(methods[1])
1.74 + self.use_name(methods[0])
1.75 + self.use_name(methods[1])
1.76 elif op_name.endswith("in"):
1.77 - self.importer.use_name("__contains__")
1.78 + self.use_name("__contains__")
1.79
1.80 return self.OP(node)
1.81
1.82 @@ -602,8 +609,8 @@
1.83
1.84 # Declare names which will be used by generated code.
1.85
1.86 - self.importer.use_name("__iter__")
1.87 - self.importer.use_name("next")
1.88 + self.use_name("__iter__")
1.89 + self.use_name("next")
1.90
1.91 # Enter the loop.
1.92
1.93 @@ -676,7 +683,7 @@
1.94 if attr is not None:
1.95 attr.set_referenced()
1.96
1.97 - self.importer.use_name(attrname)
1.98 + self.use_name(attrname)
1.99
1.100 return attr
1.101
1.102 @@ -762,7 +769,7 @@
1.103 if attr is not None:
1.104 attr.set_referenced()
1.105
1.106 - self.importer.use_name(name)
1.107 + self.use_name(name)
1.108
1.109 return attr
1.110
1.111 @@ -796,7 +803,7 @@
1.112 visitSub = _visitBinary
1.113
1.114 def visitSubscript(self, node):
1.115 - self.importer.use_name("__getitem__")
1.116 + self.use_name("__getitem__")
1.117 self.OP(node)
1.118
1.119 def visitTryExcept(self, node):