1.1 --- a/micropython/ast.py Sun Aug 24 03:06:00 2008 +0200
1.2 +++ b/micropython/ast.py Sun Aug 24 19:20:45 2008 +0200
1.3 @@ -116,6 +116,7 @@
1.4 self.unit = self.module
1.5 self.code = []
1.6 self.temp_positions = set()
1.7 + self.max_temp_position = -1
1.8
1.9 if self.module.module is not None:
1.10 self.dispatch(self.module.module)
1.11 @@ -130,6 +131,7 @@
1.12 self.unit = unit
1.13 self.code = []
1.14 self.temp_positions = set()
1.15 + self.max_temp_position = -1
1.16
1.17 if unit.astnode is not None:
1.18 self.dispatch(unit.astnode)
1.19 @@ -246,14 +248,14 @@
1.20 if not self.temp_positions:
1.21 temp_position = 0
1.22 else:
1.23 - temp_position = max(self.temp_positions) + 1
1.24 + temp_position = max(self.temp_positions)
1.25 self.temp_positions.add(temp_position)
1.26 self.max_temp_position = max(self.max_temp_position, temp_position)
1.27 - return self.unit.local_usage + temp_position # position in frame
1.28 + return self.unit.all_local_usage + temp_position # position in frame
1.29
1.30 def discard_temp(self, instruction=None):
1.31 if isinstance(instruction, LoadTemp):
1.32 - temp_position = instruction.attr - self.unit.local_usage
1.33 + temp_position = instruction.attr - self.unit.all_local_usage
1.34 self.free_temp(temp_position)
1.35
1.36 def free_temp(self, temp_position):
1.37 @@ -1714,7 +1716,7 @@
1.38
1.39 self.new_op(Return())
1.40
1.41 - extend.attr = self.max_temp_position + 1 # NOTE: See get_code for similar code.
1.42 + extend.attr = self.max_temp_position + node.unit.local_usage # NOTE: See get_code for similar code.
1.43
1.44 def visitGenExpr(self, node): raise TranslationNotImplementedError(self.module.full_name(), node, "GenExpr")
1.45
2.1 --- a/micropython/data.py Sun Aug 24 03:06:00 2008 +0200
2.2 +++ b/micropython/data.py Sun Aug 24 19:20:45 2008 +0200
2.3 @@ -392,6 +392,7 @@
2.4
2.5 self.temp_usage = 0
2.6 self.local_usage = 0
2.7 + self.all_local_usage = 0
2.8
2.9 def __repr__(self):
2.10 if self.location is not None:
2.11 @@ -725,6 +726,7 @@
2.12
2.13 self.temp_usage = 0
2.14 self.local_usage = 0
2.15 + self.all_local_usage = 0
2.16
2.17 def _add_parameters(self, argnames):
2.18 for name in argnames:
2.19 @@ -830,7 +832,8 @@
2.20 for i, attr in enumerate(self.locals().values()):
2.21 attr.position = i + j
2.22
2.23 - self.local_usage = i + j
2.24 + self.local_usage = i + 1
2.25 + self.all_local_usage = i + j + 1
2.26 self.finalised = 1
2.27
2.28 def function_from_method(self):
2.29 @@ -899,6 +902,7 @@
2.30
2.31 self.temp_usage = 0
2.32 self.local_usage = 0
2.33 + self.all_local_usage = 0
2.34
2.35 def full_name(self):
2.36 return self.name