1.1 --- a/micropython/trans.py Sat Jan 29 21:07:27 2011 +0100
1.2 +++ b/micropython/trans.py Sat Feb 19 23:29:55 2011 +0100
1.3 @@ -1379,9 +1379,15 @@
1.4
1.5 "Make a tuple using the given program 'node'."
1.6
1.7 - self.make_instance(self.get_builtin_class("tuple", node), len(node.nodes))
1.8 + # Reserve space for __class__ plus the elements themselves.
1.9 +
1.10 + self.make_instance(self.get_builtin_class("tuple", node), len(node.nodes) + 1)
1.11 temp = self.get_temp()
1.12 - self._populateSequence(temp, node)
1.13 +
1.14 + # Store using 1-based index values, since __class__ should be at position 0.
1.15 +
1.16 + self._populateSequence(temp, node, 1)
1.17 +
1.18 self.new_op(temp)
1.19 self.discard_temp(temp)
1.20
1.21 @@ -1397,7 +1403,9 @@
1.22 self.new_op(temp)
1.23 self.record_value()
1.24
1.25 - self.make_instance(self.get_builtin_class("list", node), 1)
1.26 + # Reserve space for __class__ plus _elements (the fragment reference).
1.27 +
1.28 + self.make_instance(self.get_builtin_class("list", node), 2)
1.29 list_temp = self.get_temp()
1.30 self.new_op(list_temp)
1.31 self.new_op(StoreAttr(Attr(0, None, None)))
1.32 @@ -1408,7 +1416,7 @@
1.33 self.discard_temp(temp)
1.34 self.discard_temp(list_temp)
1.35
1.36 - def _populateSequence(self, temp, node):
1.37 + def _populateSequence(self, temp, node, offset=0):
1.38
1.39 """
1.40 Populate a sequence using the given 'temp' reference and program 'node'.
1.41 @@ -1418,7 +1426,7 @@
1.42 self.dispatch(n)
1.43 self.record_value()
1.44 self.new_op(temp)
1.45 - self.new_op(StoreAttr(Attr(i, None, None)))
1.46 + self.new_op(StoreAttr(Attr(i + offset, None, None)))
1.47 self.set_source()
1.48 self.discard_value()
1.49