1.1 --- a/simplify/fixinstances.py Sat Jun 23 01:54:26 2007 +0200
1.2 +++ b/simplify/fixinstances.py Sat Jun 23 01:57:13 2007 +0200
1.3 @@ -74,15 +74,7 @@
1.4 self.current_subprograms = []
1.5
1.6 self.module = module
1.7 -
1.8 - # Visit structures and instances.
1.9 -
1.10 - for structure in self.module.simplifier.structures:
1.11 - for instance in structure.get_instances():
1.12 - for name, attrs in instance.namespace.items():
1.13 - instance.namespace[name] = self._replace(attrs)
1.14 -
1.15 - self.process_node(self.module)
1.16 + self.process_node(module)
1.17
1.18 # Then, process all functions and methods.
1.19
1.20 @@ -95,6 +87,19 @@
1.21 for specialised in subprogram.active():
1.22 self.subprograms.append(self.process_node(specialised))
1.23
1.24 + def process_structures(self, module):
1.25 +
1.26 + "Process the structures of the given 'module'."
1.27 +
1.28 + self.module = module
1.29 +
1.30 + # Visit structures and instances.
1.31 +
1.32 + for structure in self.module.simplifier.structures:
1.33 + for instance in structure.get_instances():
1.34 + for name, attrs in instance.namespace.items():
1.35 + instance.namespace[name] = self._replace(attrs)
1.36 +
1.37 def process_node(self, node):
1.38
1.39 """
1.40 @@ -139,9 +144,10 @@
1.41 for name in ("accesses", "writes", "paramtypes"):
1.42 if hasattr(node, name):
1.43 d = getattr(node, name)
1.44 + new_d = {}
1.45 for expr, attrs in d.items():
1.46 - del d[expr]
1.47 - d[self._get_replacement(expr)] = self._replace(attrs, name)
1.48 + new_d[self._get_replacement(expr)] = self._replace(attrs, name)
1.49 + setattr(node, name, new_d)
1.50
1.51 # Visit program nodes.
1.52
1.53 @@ -216,9 +222,16 @@
1.54
1.55 # Convenience functions.
1.56
1.57 +def fix_structures(module):
1.58 +
1.59 + "Fix the structures in the given 'module'."
1.60 +
1.61 + fixer = Fixer()
1.62 + fixer.process_structures(module)
1.63 +
1.64 def fix(module):
1.65
1.66 - "Fix the instances in the given 'module'."
1.67 + "Fix the structure references in the given 'module'."
1.68
1.69 fixer = Fixer()
1.70 fixer.process(module)