# HG changeset patch # User Paul Boddie # Date 1693326684 -7200 # Node ID 3f8778c40b95d385a0f63afaee639e256856f647 # Parent 0be4f390513d27d3680955f20d7b75aaf6dd6813 Reset various temporary storage counters for every statement. This is not helpful for result target storage, however. diff -r 0be4f390513d -r 3f8778c40b95 translator.py --- a/translator.py Tue Aug 29 01:46:23 2023 +0200 +++ b/translator.py Tue Aug 29 18:31:24 2023 +0200 @@ -314,12 +314,8 @@ self.process_function_body_node(node) else: self.in_function = False - self.function_target = 0 - self.max_function_target = 0 - self.context_index = 0 - self.max_context_index = 0 - self.accessor_index = 0 - self.max_accessor_index = 0 + self.reset_temp_limits() + self.start_module() self.process_structure(node) self.end_module() @@ -336,6 +332,8 @@ # Handle processing requests on nodes. else: + self.reset_temp_counters() + l = CommonModule.process_structure(self, node) # Return indications of return statement usage. @@ -852,14 +850,19 @@ in_conditional = self.in_conditional self.in_conditional = False - self.function_target = 0 - self.max_function_target = 0 - self.context_index = 0 - self.max_context_index = 0 - self.accessor_index = 0 - self.max_accessor_index = 0 + + # Reset temporary storage counters and limits. The counters are reset + # for every statement, but are also involved in expressions processed + # for this node. + + self.reset_temp_limits() + self.reset_temp_counters() + + # Reset result target storage details. To be effective, storage + # locations are not reused between statements. + + self.max_result_target = 0 self.result_target = 0 - self.max_result_target = 0 self.result_target_name = None # Volatile locals for exception handling. @@ -1518,6 +1521,22 @@ len(args), "__ARGS(%s)" % argstr)) return InvocationResult(stages) + def reset_temp_counters(self): + + "Reset the target counters." + + self.function_target = 0 + self.context_index = 0 + self.accessor_index = 0 + + def reset_temp_limits(self): + + "Reset the target counter limits." + + self.max_function_target = 0 + self.max_context_index = 0 + self.max_accessor_index = 0 + def next_result(self): "Allocate the next result target storage."