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)