1.1 --- a/micropython/ast.py Sun Aug 21 14:24:28 2011 +0200
1.2 +++ b/micropython/ast.py Sun Aug 21 21:38:56 2011 +0200
1.3 @@ -212,7 +212,7 @@
1.4 self.set_block(end_block)
1.5
1.6 # Make a separate instruction to prevent previous temp accesses from
1.7 - # being altered by set_source.
1.8 + # being altered by assign_value.
1.9
1.10 temp = LoadTemp(temp_pos)
1.11 self.new_op(temp)
1.12 @@ -245,7 +245,7 @@
1.13 self.set_block(end_block)
1.14
1.15 # Make a separate instruction to prevent previous temp accesses from
1.16 - # being altered by set_source.
1.17 + # being altered by assign_value.
1.18
1.19 temp = LoadTemp(temp_pos)
1.20 self.new_op(temp)
1.21 @@ -302,7 +302,7 @@
1.22 self.record_value()
1.23 self.new_op(temp2)
1.24 self.new_op(TestIdentity(target="status"))
1.25 - self.set_source()
1.26 + self.assign_value()
1.27 self.discard_value()
1.28
1.29 elif op_name.endswith("in"):
1.30 @@ -454,7 +454,7 @@
1.31 "Assign the assignment expression to the recipient 'node'."
1.32
1.33 self._visitAttr(node, self.optimiser.get_attribute_store_instructions())
1.34 - self.set_source()
1.35 + self.assign_value()
1.36
1.37 def visitAssList(self, node):
1.38
1.39 @@ -493,7 +493,7 @@
1.40 raise TranslationNotImplementedError("AssName(OP_DELETE)")
1.41
1.42 self._visitName(node, self.name_store_instructions)
1.43 - self.set_source()
1.44 + self.assign_value()
1.45
1.46 # Add any attribute usage guards.
1.47
1.48 @@ -531,7 +531,7 @@
1.49 self.new_op(LoadClass(node.unit))
1.50 self.record_value()
1.51 self._visitName(node, self.name_store_instructions)
1.52 - self.set_source()
1.53 + self.assign_value()
1.54 self.discard_value()
1.55
1.56 # Visit the code.
1.57 @@ -559,7 +559,7 @@
1.58 self.record_value()
1.59
1.60 self._visitName(node, self.name_store_instructions) # AssName equivalent
1.61 - self.set_source()
1.62 + self.assign_value()
1.63 self.discard_value()
1.64
1.65 # Visiting of the code occurs when get_code is invoked on this node.
2.1 --- a/micropython/code.py Sun Aug 21 14:24:28 2011 +0200
2.2 +++ b/micropython/code.py Sun Aug 21 21:38:56 2011 +0200
2.3 @@ -135,7 +135,7 @@
2.4
2.5 self.discard_temp(self.expr_temp.pop())
2.6
2.7 - def set_source(self, expr=None):
2.8 + def assign_value(self, expr=None):
2.9
2.10 """
2.11 Set the source of an assignment using 'expr' or the current assignment
2.12 @@ -161,6 +161,7 @@
2.13
2.14 def set_working(self, expr):
2.15 if expr is not None:
2.16 + expr = expr.copy()
2.17 expr.target = "working"
2.18 self.insert_op(-1, expr)
2.19 self.last_op().source = "working"
3.1 --- a/micropython/rsvp.py Sun Aug 21 14:24:28 2011 +0200
3.2 +++ b/micropython/rsvp.py Sun Aug 21 21:38:56 2011 +0200
3.3 @@ -306,6 +306,9 @@
3.4 self.target = target
3.5 self.source = source
3.6
3.7 + def get_details(self):
3.8 + return self.__class__, self.attr, self.working, self.target, self.source
3.9 +
3.10 def copy(self):
3.11 return self.__class__(self.attr, self.working, self.target, self.source)
3.12
3.13 @@ -316,6 +319,15 @@
3.14 self.format_source(),
3.15 self.format_target())
3.16
3.17 + def __hash__(self):
3.18 + return hash(self.get_details())
3.19 +
3.20 + def __eq__(self, other):
3.21 + return self.get_details() == other.get_details()
3.22 +
3.23 + def __ne__(self, other):
3.24 + return not self.__eq__(other)
3.25 +
3.26 def format_operand(self):
3.27 operand = self.get_operand()
3.28 return repr(operand)
4.1 --- a/micropython/trans.py Sun Aug 21 14:24:28 2011 +0200
4.2 +++ b/micropython/trans.py Sun Aug 21 21:38:56 2011 +0200
4.3 @@ -638,7 +638,7 @@
4.4 self.new_op(temp_target)
4.5 self.new_op(StoreFrameIndex(paramindex))
4.6
4.7 - self.set_source()
4.8 + self.assign_value()
4.9 self.discard_value()
4.10
4.11 # Record the highest possible frame position for this argument.
4.12 @@ -982,7 +982,7 @@
4.13 else:
4.14 self.record_value()
4.15 self.new_op(StoreName(fn[parameter]))
4.16 - self.set_source()
4.17 + self.assign_value()
4.18 self.discard_value()
4.19
4.20 if parameters is not None:
4.21 @@ -1018,7 +1018,7 @@
4.22 self.new_op(StoreAttr(attr))
4.23 else:
4.24 self.new_op(StoreAddress(attr))
4.25 - self.set_source()
4.26 + self.assign_value()
4.27 self.discard_value()
4.28
4.29 if dynamic:
4.30 @@ -1243,7 +1243,7 @@
4.31 list_temp = self.get_temp()
4.32 self.new_op(list_temp)
4.33 self.new_op(StoreAttr(Attr(0, None, None))) # _elements is at position 0
4.34 - self.set_source()
4.35 + self.assign_value()
4.36 self.discard_value()
4.37
4.38 self.new_op(list_temp.copy())
4.39 @@ -1271,7 +1271,7 @@
4.40
4.41 self.new_op(temp)
4.42 self.new_op(StoreAttr(Attr(i + offset, None, None)))
4.43 - self.set_source()
4.44 + self.assign_value()
4.45
4.46 def _generateTestBoolean(self, node, temp):
4.47
5.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
5.2 +++ b/tests/return_choice.py Sun Aug 21 21:38:56 2011 +0200
5.3 @@ -0,0 +1,9 @@
5.4 +#!/usr/bin/env python
5.5 +
5.6 +def choice(x, y):
5.7 + return x and y
5.8 +
5.9 +result_0 = choice(0, 1)
5.10 +result_3 = choice(2, 3)
5.11 +
5.12 +# vim: tabstop=4 expandtab shiftwidth=4