# HG changeset patch # User Paul Boddie # Date 1219598445 -7200 # Node ID ff0d31fbd387af511e637730d6655b0b37c58f9c # Parent dff32649a6d41877294251c27a84041fc7bc9b3a Fixed temporary storage and local usage. diff -r dff32649a6d4 -r ff0d31fbd387 micropython/ast.py --- a/micropython/ast.py Sun Aug 24 03:06:00 2008 +0200 +++ b/micropython/ast.py Sun Aug 24 19:20:45 2008 +0200 @@ -116,6 +116,7 @@ self.unit = self.module self.code = [] self.temp_positions = set() + self.max_temp_position = -1 if self.module.module is not None: self.dispatch(self.module.module) @@ -130,6 +131,7 @@ self.unit = unit self.code = [] self.temp_positions = set() + self.max_temp_position = -1 if unit.astnode is not None: self.dispatch(unit.astnode) @@ -246,14 +248,14 @@ if not self.temp_positions: temp_position = 0 else: - temp_position = max(self.temp_positions) + 1 + temp_position = max(self.temp_positions) self.temp_positions.add(temp_position) self.max_temp_position = max(self.max_temp_position, temp_position) - return self.unit.local_usage + temp_position # position in frame + return self.unit.all_local_usage + temp_position # position in frame def discard_temp(self, instruction=None): if isinstance(instruction, LoadTemp): - temp_position = instruction.attr - self.unit.local_usage + temp_position = instruction.attr - self.unit.all_local_usage self.free_temp(temp_position) def free_temp(self, temp_position): @@ -1714,7 +1716,7 @@ self.new_op(Return()) - extend.attr = self.max_temp_position + 1 # NOTE: See get_code for similar code. + extend.attr = self.max_temp_position + node.unit.local_usage # NOTE: See get_code for similar code. def visitGenExpr(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "GenExpr") diff -r dff32649a6d4 -r ff0d31fbd387 micropython/data.py --- a/micropython/data.py Sun Aug 24 03:06:00 2008 +0200 +++ b/micropython/data.py Sun Aug 24 19:20:45 2008 +0200 @@ -392,6 +392,7 @@ self.temp_usage = 0 self.local_usage = 0 + self.all_local_usage = 0 def __repr__(self): if self.location is not None: @@ -725,6 +726,7 @@ self.temp_usage = 0 self.local_usage = 0 + self.all_local_usage = 0 def _add_parameters(self, argnames): for name in argnames: @@ -830,7 +832,8 @@ for i, attr in enumerate(self.locals().values()): attr.position = i + j - self.local_usage = i + j + self.local_usage = i + 1 + self.all_local_usage = i + j + 1 self.finalised = 1 def function_from_method(self): @@ -899,6 +902,7 @@ self.temp_usage = 0 self.local_usage = 0 + self.all_local_usage = 0 def full_name(self): return self.name