1.1 --- a/simplify/fixinstances.py Thu Jun 21 01:25:08 2007 +0200
1.2 +++ b/simplify/fixinstances.py Thu Jun 21 01:26:33 2007 +0200
1.3 @@ -139,7 +139,7 @@
1.4 if hasattr(node, name):
1.5 d = getattr(node, name)
1.6 for expr, attrs in d.items():
1.7 - self._replace(attrs, name)
1.8 + self._replace(attrs, name, d, expr)
1.9
1.10 # Visit program nodes.
1.11
1.12 @@ -165,30 +165,28 @@
1.13
1.14 return node
1.15
1.16 - def _replace(self, items, name=None):
1.17 - to_replace = set()
1.18 - for item in items:
1.19 + def _replace(self, items, name=None, container=None, key=None):
1.20 + for item in list(items):
1.21 + items.remove(item)
1.22 if name == "accesses":
1.23 attr, accessor = item
1.24 value = attr.type
1.25 + items.append((Attribute(self._get_replacement(attr.context), self._get_replacement(value)), self._get_replacement(accessor)))
1.26 else:
1.27 attr = item
1.28 value = attr.type
1.29 - if isinstance(value, Instance):
1.30 - distinct_instances = value.get_class().get_distinct_instances()
1.31 - if distinct_instances.has_key(value):
1.32 - to_replace.add((item, distinct_instances[value]))
1.33 + items.add(Attribute(self._get_replacement(attr.context), self._get_replacement(value)))
1.34
1.35 - for item, replacement in to_replace:
1.36 - items.remove(item)
1.37 + if name == "accesses":
1.38 + del container[key]
1.39 + container[self._get_replacement(key)] = items
1.40
1.41 - for item, replacement in to_replace:
1.42 - if name == "accesses":
1.43 - attr, accessor = item
1.44 - items.append((Attribute(attr.context, replacement), accessor))
1.45 - else:
1.46 - attr = item
1.47 - items.add(Attribute(attr.context, replacement))
1.48 + def _get_replacement(self, value):
1.49 + if isinstance(value, Instance):
1.50 + distinct_instances = value.get_class().get_distinct_instances()
1.51 + return distinct_instances[value]
1.52 + else:
1.53 + return value
1.54
1.55 def dispatch(self, node, *args):
1.56 return Visitor.dispatch(self, node, *args)
2.1 --- a/simplify/simplified/data.py Thu Jun 21 01:25:08 2007 +0200
2.2 +++ b/simplify/simplified/data.py Thu Jun 21 01:26:33 2007 +0200
2.3 @@ -37,6 +37,8 @@
2.4 Structure.__init__(self, *args, **kw)
2.5 WithName.__init__(self)
2.6
2.7 + self.cache = None
2.8 +
2.9 def full_name(self):
2.10 return "class %s" % self._full_name
2.11
2.12 @@ -81,6 +83,9 @@
2.13 attribute types are distinct.
2.14 """
2.15
2.16 + if self.cache is not None:
2.17 + return self.cache
2.18 +
2.19 instances = {}
2.20 names_found = []
2.21 instances_found = []
2.22 @@ -101,6 +106,7 @@
2.23 instances_found.append(instance)
2.24 instances[instance] = instance
2.25
2.26 + self.cache = instances
2.27 return instances
2.28
2.29 class SingleInstanceClass(_Class):