1.1 --- a/simplify/fixinstances.py Tue Jul 31 01:05:24 2007 +0200
1.2 +++ b/simplify/fixinstances.py Sun Aug 05 21:38:40 2007 +0200
1.3 @@ -109,6 +109,18 @@
1.4 for name, attrs in instance.namespace.items():
1.5 instance.namespace[name] = self._replace(attrs)
1.6
1.7 + def process_signatures(self, module):
1.8 +
1.9 + "Process the signatures of subprograms in this 'module'."
1.10 +
1.11 + self.module = module
1.12 +
1.13 + # Visit each subprogram, updating the signatures.
1.14 +
1.15 + for subprogram in self.module.simplifier.subprograms:
1.16 + for specialisation in subprogram.active():
1.17 + self._replace_dict(specialisation, "paramtypes")
1.18 +
1.19 def process_node(self, node):
1.20
1.21 """
1.22 @@ -148,15 +160,10 @@
1.23
1.24 for name in ("non_accesses", "non_writes", "raises", "returns", "types", "invocations"):
1.25 if hasattr(node, name):
1.26 - attrs = getattr(node, name)
1.27 - setattr(node, name, self._replace(attrs, name))
1.28 + self._replace_list(node, name)
1.29 for name in ("accesses", "writes", "paramtypes"):
1.30 if hasattr(node, name):
1.31 - d = getattr(node, name)
1.32 - new_d = {}
1.33 - for expr, attrs in d.items():
1.34 - new_d[self._get_replacement(expr)] = self._replace(attrs, name)
1.35 - setattr(node, name, new_d)
1.36 + self._replace_dict(node, name)
1.37
1.38 # Visit program nodes.
1.39
1.40 @@ -182,6 +189,17 @@
1.41
1.42 return node
1.43
1.44 + def _replace_list(self, node, name):
1.45 + attrs = getattr(node, name)
1.46 + setattr(node, name, self._replace(attrs, name))
1.47 +
1.48 + def _replace_dict(self, node, name):
1.49 + d = getattr(node, name)
1.50 + new_d = {}
1.51 + for expr, attrs in d.items():
1.52 + new_d[self._get_replacement(expr)] = self._replace(attrs, name)
1.53 + setattr(node, name, new_d)
1.54 +
1.55 def _replace(self, items, name=None):
1.56
1.57 """
1.58 @@ -265,6 +283,13 @@
1.59 fixer = Fixer()
1.60 fixer.process_structures(module)
1.61
1.62 +def fix_signatures(module):
1.63 +
1.64 + "Fix the signatures in the given 'module'."
1.65 +
1.66 + fixer = Fixer()
1.67 + fixer.process_signatures(module)
1.68 +
1.69 def fix(module):
1.70
1.71 "Fix the structure references in the given 'module'."