1.1 --- a/simplify/annotate.py Sat Jun 23 01:53:53 2007 +0200
1.2 +++ b/simplify/annotate.py Sat Jun 23 01:54:26 2007 +0200
1.3 @@ -159,7 +159,7 @@
1.4 """
1.5
1.6 self.subprograms = []
1.7 - self.current_subprograms = []
1.8 + self.current_subprograms = set()
1.9 self.current_namespaces = []
1.10 self.rerun_subprograms = {}
1.11 self.namespace = None
1.12 @@ -196,7 +196,7 @@
1.13
1.14 # Record the current subprogram and namespace.
1.15
1.16 - self.current_subprograms.append(node)
1.17 + self.current_subprograms.add(node)
1.18
1.19 # Determine the namespace.
1.20
1.21 @@ -225,6 +225,10 @@
1.22 self.dispatch(node)
1.23 self.extract_results(node)
1.24
1.25 + # We may need to "re-run" subprograms because they were called
1.26 + # recursively with potentially different arguments. These argument types
1.27 + # are now tried out here.
1.28 +
1.29 while self.rerun_subprograms.has_key(node):
1.30 all_rerun_locals = self.rerun_subprograms[node]
1.31 del self.rerun_subprograms[node]
1.32 @@ -241,7 +245,7 @@
1.33 # Restore the previous subprogram and namespace.
1.34
1.35 self.namespace = self.current_namespaces.pop()
1.36 - self.current_subprograms.pop()
1.37 + self.current_subprograms.remove(node)
1.38 self.reset_module_namespace(using_module_namespace)
1.39
1.40 def set_module_namespace(self, using_module_namespace):