1.1 --- a/micropython/trans.py Fri Sep 04 00:26:30 2009 +0200
1.2 +++ b/micropython/trans.py Thu Sep 24 21:29:29 2009 +0200
1.3 @@ -1065,6 +1065,21 @@
1.4 self.discard_temp(temp)
1.5 self.discard_temp(temp_out)
1.6
1.7 + def _visitBinaryBit(self, node):
1.8 +
1.9 + """
1.10 + Need to impose binary rules over a sequence of nodes. The
1.11 + short-circuiting of the similar logical operators is not imposed by the
1.12 + bitwise operators.
1.13 + """
1.14 +
1.15 + left = None
1.16 +
1.17 + for right in node.nodes:
1.18 + if left is not None:
1.19 + self._visitBinaryMethods(node, left, right)
1.20 + left = right
1.21 +
1.22 def _visitBinary(self, node):
1.23
1.24 """
1.25 @@ -1083,16 +1098,20 @@
1.26 raise TypeError
1.27 """
1.28
1.29 + self._visitBinaryMethods(node, node.left, node.right)
1.30 +
1.31 + def _visitBinaryMethods(self, node, left, right):
1.32 +
1.33 left_method, right_method = binary_methods[node.__class__.__name__]
1.34
1.35 # Evaluate and store the left operand in temporary storage.
1.36
1.37 - self.dispatch(node.left)
1.38 + self.dispatch(left)
1.39 temp1 = self.optimiser.optimise_temp_storage()
1.40
1.41 # Evaluate and store the right operand in temporary storage.
1.42
1.43 - self.dispatch(node.right)
1.44 + self.dispatch(right)
1.45 temp2 = self.optimiser.optimise_temp_storage()
1.46
1.47 temp_out = self._generateBinary(node, temp1, temp2, left_method, right_method)