[pypy-svn] r26299 - pypy/dist/pypy/translator/cl

sanxiyn at codespeak.net sanxiyn at codespeak.net
Tue Apr 25 08:53:02 CEST 2006


Author: sanxiyn
Date: Tue Apr 25 08:53:00 2006
New Revision: 26299

Modified:
   pypy/dist/pypy/translator/cl/gencl.py
Log:
Refactor binary_ops


Modified: pypy/dist/pypy/translator/cl/gencl.py
==============================================================================
--- pypy/dist/pypy/translator/cl/gencl.py	(original)
+++ pypy/dist/pypy/translator/cl/gencl.py	Tue Apr 25 08:53:00 2006
@@ -10,49 +10,30 @@
 
     def __init__(self, gen, op):
         self.gen = gen
-        self.str = repr_arg
         self.op = op
         self.opname = op.opname
         self.args = op.args
         self.result = op.result
 
     def __iter__(self):
-        if self.opname in self.binary_ops:
-            for line in self.op_binary(self.opname):
-                yield line
-        else:
-            meth = getattr(self, "op_" + self.opname)
-            result = repr_arg(self.result)
-            args = map(repr_arg, self.args)
-            for line in meth(result, *args):
-                yield line
+        method = getattr(self, "op_" + self.opname)
+        result = repr_arg(self.result)
+        args = map(repr_arg, self.args)
+        for line in method(result, *args):
+            yield line
 
     def op_same_as(self, result, arg):
         yield "(setf %s %s)" % (result, arg)
 
-    binary_ops = {
-        #"add": "+",
-        "int_add": "+",
-        "sub": "-",
-        "inplace_add": "+", # weird, but it works
-        "inplace_lshift": "ash",
-        "mod": "mod",
-        "int_mod": "mod",
-        "lt": "<",
-        "int_lt": "<",
-        "le": "<=",
-        "eq": "=",
-        "int_eq": "=",
-        "gt": ">",
-        "and_": "logand",
-        "getitem": "elt",
-    }
-
-    def op_binary(self, op):
-        s = self.str
-        result, (arg1, arg2) = self.result, self.args
-        cl_op = self.binary_ops[op]
-        yield "(setf %s (%s %s %s))" % (s(result), cl_op, s(arg1), s(arg2))
+    def make_binary_op(cl_op):
+        def _(self, result, arg1, arg2):
+            yield "(setf %s (%s %s %s))" % (result, cl_op, arg1, arg2)
+        return _
+
+    op_int_add = make_binary_op("+")
+    op_int_eq = make_binary_op("=")
+    op_int_lt = make_binary_op("<")
+    op_int_mod = make_binary_op("mod")
 
     def op_int_is_true(self, result, arg):
         yield "(setf %s (not (zerop %s)))" % (result, arg)



More information about the Pypy-commit mailing list