1.1 --- a/translator.py Tue Aug 29 01:46:23 2023 +0200
1.2 +++ b/translator.py Tue Aug 29 18:31:24 2023 +0200
1.3 @@ -314,12 +314,8 @@
1.4 self.process_function_body_node(node)
1.5 else:
1.6 self.in_function = False
1.7 - self.function_target = 0
1.8 - self.max_function_target = 0
1.9 - self.context_index = 0
1.10 - self.max_context_index = 0
1.11 - self.accessor_index = 0
1.12 - self.max_accessor_index = 0
1.13 + self.reset_temp_limits()
1.14 +
1.15 self.start_module()
1.16 self.process_structure(node)
1.17 self.end_module()
1.18 @@ -336,6 +332,8 @@
1.19 # Handle processing requests on nodes.
1.20
1.21 else:
1.22 + self.reset_temp_counters()
1.23 +
1.24 l = CommonModule.process_structure(self, node)
1.25
1.26 # Return indications of return statement usage.
1.27 @@ -852,14 +850,19 @@
1.28
1.29 in_conditional = self.in_conditional
1.30 self.in_conditional = False
1.31 - self.function_target = 0
1.32 - self.max_function_target = 0
1.33 - self.context_index = 0
1.34 - self.max_context_index = 0
1.35 - self.accessor_index = 0
1.36 - self.max_accessor_index = 0
1.37 +
1.38 + # Reset temporary storage counters and limits. The counters are reset
1.39 + # for every statement, but are also involved in expressions processed
1.40 + # for this node.
1.41 +
1.42 + self.reset_temp_limits()
1.43 + self.reset_temp_counters()
1.44 +
1.45 + # Reset result target storage details. To be effective, storage
1.46 + # locations are not reused between statements.
1.47 +
1.48 + self.max_result_target = 0
1.49 self.result_target = 0
1.50 - self.max_result_target = 0
1.51 self.result_target_name = None
1.52
1.53 # Volatile locals for exception handling.
1.54 @@ -1518,6 +1521,22 @@
1.55 len(args), "__ARGS(%s)" % argstr))
1.56 return InvocationResult(stages)
1.57
1.58 + def reset_temp_counters(self):
1.59 +
1.60 + "Reset the target counters."
1.61 +
1.62 + self.function_target = 0
1.63 + self.context_index = 0
1.64 + self.accessor_index = 0
1.65 +
1.66 + def reset_temp_limits(self):
1.67 +
1.68 + "Reset the target counter limits."
1.69 +
1.70 + self.max_function_target = 0
1.71 + self.max_context_index = 0
1.72 + self.max_accessor_index = 0
1.73 +
1.74 def next_result(self):
1.75
1.76 "Allocate the next result target storage."