Author: Ronan Lamy <[email protected]>
Branch: translation-cleanup
Changeset: r58296:dce1aedd5af6
Date: 2012-10-21 02:35 +0100
http://bitbucket.org/pypy/pypy/changeset/dce1aedd5af6/

Log:    Add BINARY_OPS to FSFrame

diff --git a/pypy/objspace/flow/flowcontext.py 
b/pypy/objspace/flow/flowcontext.py
--- a/pypy/objspace/flow/flowcontext.py
+++ b/pypy/objspace/flow/flowcontext.py
@@ -211,7 +211,7 @@
 
 # ____________________________________________________________
 
-_unary_ops=[('UNARY_POSITIVE', "pos"),
+_unary_ops = [('UNARY_POSITIVE', "pos"),
     ('UNARY_NEGATIVE', "neg"),
     ('UNARY_NOT', "not_"),
     ('UNARY_CONVERT', "repr"),
@@ -227,6 +227,46 @@
     UNARY_OP.func_name = OPCODE
     return UNARY_OP
 
+_binary_ops = [
+    ('BINARY_MULTIPLY', "mul"),
+    ('BINARY_TRUE_DIVIDE', "truediv"),
+    ('BINARY_FLOOR_DIVIDE', "floordiv"),
+    ('BINARY_DIVIDE', "div"),
+    ('BINARY_MODULO', "mod"),
+    ('BINARY_ADD', "add"),
+    ('BINARY_SUBTRACT', "sub"),
+    ('BINARY_SUBSCR', "getitem"),
+    ('BINARY_LSHIFT', "lshift"),
+    ('BINARY_RSHIFT', "rshift"),
+    ('BINARY_AND', "and_"),
+    ('BINARY_XOR', "xor"),
+    ('BINARY_OR', "or_"),
+    ('INPLACE_MULTIPLY', "inplace_mul"),
+    ('INPLACE_TRUE_DIVIDE', "inplace_truediv"),
+    ('INPLACE_FLOOR_DIVIDE', "inplace_floordiv"),
+    ('INPLACE_DIVIDE', "inplace_div"),
+    ('INPLACE_MODULO', "inplace_mod"),
+    ('INPLACE_ADD', "inplace_add"),
+    ('INPLACE_SUBTRACT', "inplace_sub"),
+    ('INPLACE_LSHIFT', "inplace_lshift"),
+    ('INPLACE_RSHIFT', "inplace_rshift"),
+    ('INPLACE_AND', "inplace_and"),
+    ('INPLACE_XOR', "inplace_xor"),
+    ('INPLACE_OR', "inplace_or"),
+]
+
+def binaryoperation(OPCODE, op):
+    """NOT_RPYTHON"""
+    def BINARY_OP(self, *ignored):
+        operation = getattr(self.space, op)
+        w_2 = self.popvalue()
+        w_1 = self.popvalue()
+        w_result = operation(w_1, w_2)
+        self.pushvalue(w_result)
+    BINARY_OP.binop = op
+    BINARY_OP.func_name = OPCODE
+    return BINARY_OP
+
 compare_method = [
     "cmp_lt",   # "<"
     "cmp_le",   # "<="
@@ -241,7 +281,7 @@
     "cmp_exc_match",
     ]
 
-class FlowSpaceFrame(object):
+class FlowSpaceFrame(pyframe.PyFrame):
     opcode_method_names = host_bytecode_spec.method_names
 
     def __init__(self, space, graph, code):
@@ -857,6 +897,9 @@
     for OPCODE, op in _unary_ops:
         locals()[OPCODE] = unaryoperation(OPCODE, op)
 
+    for OPCODE, op in _binary_ops:
+        locals()[OPCODE] = binaryoperation(OPCODE, op)
+
     def BUILD_LIST_FROM_ARG(self, _, next_instr):
         # This opcode was added with pypy-1.8.  Here is a simpler
         # version, enough for annotation.
_______________________________________________
pypy-commit mailing list
[email protected]
http://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to