1.1 --- a/micropython/inspect.py Sat Feb 28 19:40:15 2009 +0100
1.2 +++ b/micropython/inspect.py Mon Mar 02 00:04:55 2009 +0100
1.3 @@ -152,19 +152,17 @@
1.4 # employed in the final program.
1.5
1.6 if isinstance(value, Attr):
1.7 - attr_value = value.value
1.8
1.9 # Only remove entries for classes and functions, not methods.
1.10
1.11 - if attr_value is not None:
1.12 - for attr_value in value.assignment_values:
1.13 - if (isinstance(attr_value, Function) and not attr_value.is_method() or
1.14 - isinstance(attr_value, Class)) and not attr_value.referenced:
1.15 - pass
1.16 - else:
1.17 - break
1.18 + for attr_value in value.get_values():
1.19 + if (isinstance(attr_value, Function) and not attr_value.is_method() or
1.20 + isinstance(attr_value, Class)) and not attr_value.referenced:
1.21 + pass
1.22 else:
1.23 - del self[name]
1.24 + break
1.25 + else:
1.26 + del self[name]
1.27
1.28 # Complain about globals not initialised at the module level.
1.29
1.30 @@ -195,10 +193,10 @@
1.31 # assigned object to the class and are unreferenced.
1.32
1.33 if name not in self.importer.names_used and \
1.34 - attr.assignments == 1 and isinstance(attr.value, Function) and \
1.35 - attr.value.is_method() and not attr.value.referenced:
1.36 + attr.assignments == 1 and isinstance(attr.get_value(), Function) and \
1.37 + attr.get_value().is_method() and not attr.get_value().referenced:
1.38
1.39 - self.all_objects.remove(attr.value)
1.40 + self.all_objects.remove(attr.get_value())
1.41 del obj[name]
1.42
1.43 def finalise(self):
1.44 @@ -248,12 +246,7 @@
1.45 expression.
1.46 """
1.47
1.48 - if isinstance(self.expr, Attr):
1.49 - assigned_value = self.expr.value
1.50 - else:
1.51 - assigned_value = self.expr
1.52 -
1.53 - module.set(name, assigned_value, 0)
1.54 + module.set(name, self.expr, 0)
1.55
1.56 def store_class_attr(self, name):
1.57
1.58 @@ -263,13 +256,7 @@
1.59 """
1.60
1.61 if self.in_method and self.namespaces[-2].has_key(name):
1.62 -
1.63 - if isinstance(self.expr, Attr):
1.64 - assigned_value = self.expr.value
1.65 - else:
1.66 - assigned_value = self.expr
1.67 -
1.68 - self.namespaces[-2].set(name, assigned_value, 0)
1.69 + self.namespaces[-2].set(name, self.expr, 0)
1.70 return 1
1.71
1.72 return 0
1.73 @@ -353,10 +340,7 @@
1.74
1.75 for n in node.defaults:
1.76 self.expr = self.dispatch(n)
1.77 - if isinstance(self.expr, Attr):
1.78 - function.store_default(self.expr.value)
1.79 - else:
1.80 - function.store_default(self.expr)
1.81 + function.store_default(self.expr)
1.82
1.83 # Enter the function.
1.84
1.85 @@ -416,9 +400,9 @@
1.86 if expr.name == "self":
1.87 if not self.store_class_attr(node.attrname):
1.88 self.store_instance_attr(node.attrname)
1.89 - elif isinstance(expr.value, Module):
1.90 - self.store_module_attr(node.attrname, expr.value)
1.91 - print "Warning: attribute %r of module %r set outside the module." % (node.attrname, expr.value.name)
1.92 + elif isinstance(expr.get_value(), Module):
1.93 + self.store_module_attr(node.attrname, expr.get_value())
1.94 + print "Warning: attribute %r of module %r set outside the module." % (node.attrname, expr.get_value().name)
1.95 return None
1.96
1.97 def visitAssList(self, node):
1.98 @@ -478,7 +462,7 @@
1.99 raise InspectError(self.full_name(), node,
1.100 "Base class %r for %r is not constant." % (base, cls.full_name()))
1.101 else:
1.102 - cls.add_base(expr.value)
1.103 + cls.add_base(expr.get_value())
1.104 else: # if expr is None:
1.105 raise InspectError(self.full_name(), node,
1.106 "Base class %r for %r is not found: it may be hidden in some way." % (base, cls.full_name()))
1.107 @@ -488,7 +472,7 @@
1.108
1.109 if not node.bases and not (self.name == "__builtins__" and node.name == "object") :
1.110 expr = self.dispatch(compiler.ast.Name("object"))
1.111 - cls.add_base(expr.value)
1.112 + cls.add_base(expr.get_value())
1.113
1.114 # Make a back reference from the node for code generation.
1.115
1.116 @@ -573,9 +557,9 @@
1.117 if name != "*":
1.118 if module is not None and module.namespace.has_key(name):
1.119 attr = module[name]
1.120 - self.store(alias or name, attr.value)
1.121 - if isinstance(attr.value, Module) and not attr.value.loaded:
1.122 - self.importer.load(attr.value.name)
1.123 + self.store(alias or name, attr)
1.124 + if isinstance(attr.get_value(), Module) and not attr.get_value().loaded:
1.125 + self.importer.load(attr.get_value().name)
1.126
1.127 # Support the import of names from missing modules.
1.128
1.129 @@ -585,9 +569,9 @@
1.130 if module is not None:
1.131 for n in module.namespace.keys():
1.132 attr = module[n]
1.133 - self.store(n, attr.value)
1.134 - if isinstance(attr.value, Module) and not attr.value.loaded:
1.135 - self.importer.load(attr.value.name)
1.136 + self.store(n, attr)
1.137 + if isinstance(attr.get_value(), Module) and not attr.get_value().loaded:
1.138 + self.importer.load(attr.get_value().name)
1.139
1.140 return None
1.141
1.142 @@ -607,7 +591,7 @@
1.143 attrname = node.attrname
1.144
1.145 if isinstance(expr, Attr):
1.146 - value = expr.value
1.147 + value = expr.get_value()
1.148 if isinstance(value, (Class, Module)):
1.149 attr = value.namespace.get(attrname)
1.150 elif isinstance(value, UnresolvedName):