Author: Ronan Lamy <[email protected]>
Branch: annotator
Changeset: r68435:81ba01f85d71
Date: 2013-12-14 02:51 +0100
http://bitbucket.org/pypy/pypy/changeset/81ba01f85d71/

Log:    effectively define binaryop.BINARY_OPERATIONS in
        rpython.flowspace.operation

diff --git a/rpython/annotator/binaryop.py b/rpython/annotator/binaryop.py
--- a/rpython/annotator/binaryop.py
+++ b/rpython/annotator/binaryop.py
@@ -16,6 +16,7 @@
     merge_knowntypedata,)
 from rpython.annotator.bookkeeper import getbookkeeper
 from rpython.flowspace.model import Variable, Constant
+from rpython.flowspace.operation import op
 from rpython.rlib import rarithmetic
 from rpython.annotator.model import AnnotatorError
 
@@ -23,26 +24,8 @@
 def immutablevalue(x):
     return getbookkeeper().immutablevalue(x)
 
-# XXX unify this with ObjSpace.MethodTable
-BINARY_OPERATIONS = set(['add', 'sub', 'mul', 'div', 'mod',
-                         'truediv', 'floordiv', 'divmod',
-                         'and_', 'or_', 'xor',
-                         'lshift', 'rshift',
-                         'getitem', 'setitem', 'delitem',
-                         'getitem_idx', 'getitem_key', 'getitem_idx_key',
-                         'inplace_add', 'inplace_sub', 'inplace_mul',
-                         'inplace_truediv', 'inplace_floordiv', 'inplace_div',
-                         'inplace_mod',
-                         'inplace_lshift', 'inplace_rshift',
-                         'inplace_and', 'inplace_or', 'inplace_xor',
-                         'lt', 'le', 'eq', 'ne', 'gt', 'ge', 'is_', 'cmp',
-                         'coerce',
-                         ]
-                        +[opname+'_ovf' for opname in
-                          """add sub mul floordiv div mod lshift
-                           """.split()
-                          ])
-
+BINARY_OPERATIONS = set([oper.opname for oper in op.__dict__.values()
+                        if oper.dispatch == 2])
 for opname in BINARY_OPERATIONS:
     missing_operation(pairtype(SomeObject, SomeObject), opname)
 
diff --git a/rpython/flowspace/operation.py b/rpython/flowspace/operation.py
--- a/rpython/flowspace/operation.py
+++ b/rpython/flowspace/operation.py
@@ -274,7 +274,7 @@
     raise ValueError("this is not supported")
 
 
-add_operator('is_', 2, pure=True)
+add_operator('is_', 2, dispatch=2, pure=True)
 add_operator('id', 1, dispatch=1, pyfunc=id)
 add_operator('type', 1, dispatch=1, pyfunc=new_style_type, pure=True)
 add_operator('issubtype', 2, dispatch=1, pyfunc=issubclass, pure=True)  # not 
for old-style classes
@@ -285,12 +285,12 @@
 add_operator('hash', 1, dispatch=1, pyfunc=hash)
 add_operator('setattr', 3, dispatch=1, pyfunc=setattr)
 add_operator('delattr', 2, dispatch=1, pyfunc=delattr)
-add_operator('getitem', 2, pure=True)
-add_operator('getitem_idx', 2, pure=True)
-add_operator('getitem_key', 2, pure=True)
-add_operator('getitem_idx_key', 2, pure=True)
-add_operator('setitem', 3)
-add_operator('delitem', 2)
+add_operator('getitem', 2, dispatch=2, pure=True)
+add_operator('getitem_idx', 2, dispatch=2, pure=True)
+add_operator('getitem_key', 2, dispatch=2, pure=True)
+add_operator('getitem_idx_key', 2, dispatch=2, pure=True)
+add_operator('setitem', 3, dispatch=2)
+add_operator('delitem', 2, dispatch=2)
 add_operator('getslice', 3, dispatch=1, pyfunc=do_getslice, pure=True)
 add_operator('setslice', 4, dispatch=1, pyfunc=do_setslice)
 add_operator('delslice', 3, dispatch=1, pyfunc=do_delslice)
@@ -304,44 +304,44 @@
 add_operator('oct', 1, dispatch=1, pyfunc=oct, pure=True)
 add_operator('ord', 1, dispatch=1, pyfunc=ord, pure=True)
 add_operator('invert', 1, dispatch=1, pure=True)
-add_operator('add', 2, pure=True, ovf=True)
-add_operator('sub', 2, pure=True, ovf=True)
-add_operator('mul', 2, pure=True, ovf=True)
-add_operator('truediv', 2, pure=True)
-add_operator('floordiv', 2, pure=True, ovf=True)
-add_operator('div', 2, pure=True, ovf=True)
-add_operator('mod', 2, pure=True, ovf=True)
+add_operator('add', 2, dispatch=2, pure=True, ovf=True)
+add_operator('sub', 2, dispatch=2, pure=True, ovf=True)
+add_operator('mul', 2, dispatch=2, pure=True, ovf=True)
+add_operator('truediv', 2, dispatch=2, pure=True)
+add_operator('floordiv', 2, dispatch=2, pure=True, ovf=True)
+add_operator('div', 2, dispatch=2, pure=True, ovf=True)
+add_operator('mod', 2, dispatch=2, pure=True, ovf=True)
 add_operator('divmod', 2, pyfunc=divmod, pure=True)
-add_operator('lshift', 2, pure=True, ovf=True)
-add_operator('rshift', 2, pure=True)
-add_operator('and_', 2, pure=True)
-add_operator('or_', 2, pure=True)
-add_operator('xor', 2, pure=True)
+add_operator('lshift', 2, dispatch=2, pure=True, ovf=True)
+add_operator('rshift', 2, dispatch=2, pure=True)
+add_operator('and_', 2, dispatch=2, pure=True)
+add_operator('or_', 2, dispatch=2, pure=True)
+add_operator('xor', 2, dispatch=2, pure=True)
 add_operator('int', 1, dispatch=1, pyfunc=do_int, pure=True)
 add_operator('index', 1, pyfunc=do_index, pure=True)
 add_operator('float', 1, dispatch=1, pyfunc=do_float, pure=True)
 add_operator('long', 1, dispatch=1, pyfunc=do_long, pure=True)
-add_operator('inplace_add', 2, pyfunc=inplace_add)
-add_operator('inplace_sub', 2, pyfunc=inplace_sub)
-add_operator('inplace_mul', 2, pyfunc=inplace_mul)
-add_operator('inplace_truediv', 2, pyfunc=inplace_truediv)
-add_operator('inplace_floordiv', 2, pyfunc=inplace_floordiv)
-add_operator('inplace_div', 2, pyfunc=inplace_div)
-add_operator('inplace_mod', 2, pyfunc=inplace_mod)
+add_operator('inplace_add', 2, dispatch=2, pyfunc=inplace_add)
+add_operator('inplace_sub', 2, dispatch=2, pyfunc=inplace_sub)
+add_operator('inplace_mul', 2, dispatch=2, pyfunc=inplace_mul)
+add_operator('inplace_truediv', 2, dispatch=2, pyfunc=inplace_truediv)
+add_operator('inplace_floordiv', 2, dispatch=2, pyfunc=inplace_floordiv)
+add_operator('inplace_div', 2, dispatch=2, pyfunc=inplace_div)
+add_operator('inplace_mod', 2, dispatch=2, pyfunc=inplace_mod)
 add_operator('inplace_pow', 2, pyfunc=inplace_pow)
-add_operator('inplace_lshift', 2, pyfunc=inplace_lshift)
-add_operator('inplace_rshift', 2, pyfunc=inplace_rshift)
-add_operator('inplace_and', 2, pyfunc=inplace_and)
-add_operator('inplace_or', 2, pyfunc=inplace_or)
-add_operator('inplace_xor', 2, pyfunc=inplace_xor)
-add_operator('lt', 2, pure=True)
-add_operator('le', 2, pure=True)
-add_operator('eq', 2, pure=True)
-add_operator('ne', 2, pure=True)
-add_operator('gt', 2, pure=True)
-add_operator('ge', 2, pure=True)
-add_operator('cmp', 2, pyfunc=cmp, pure=True)   # rich cmps preferred
-add_operator('coerce', 2, pyfunc=coerce, pure=True)
+add_operator('inplace_lshift', 2, dispatch=2, pyfunc=inplace_lshift)
+add_operator('inplace_rshift', 2, dispatch=2, pyfunc=inplace_rshift)
+add_operator('inplace_and', 2, dispatch=2, pyfunc=inplace_and)
+add_operator('inplace_or', 2, dispatch=2, pyfunc=inplace_or)
+add_operator('inplace_xor', 2, dispatch=2, pyfunc=inplace_xor)
+add_operator('lt', 2, dispatch=2, pure=True)
+add_operator('le', 2, dispatch=2, pure=True)
+add_operator('eq', 2, dispatch=2, pure=True)
+add_operator('ne', 2, dispatch=2, pure=True)
+add_operator('gt', 2, dispatch=2, pure=True)
+add_operator('ge', 2, dispatch=2, pure=True)
+add_operator('cmp', 2, dispatch=2, pyfunc=cmp, pure=True)   # rich cmps 
preferred
+add_operator('coerce', 2, dispatch=2, pyfunc=coerce, pure=True)
 add_operator('contains', 2, pure=True)
 add_operator('get', 3, pyfunc=get, pure=True)
 add_operator('set', 3, pyfunc=set)
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit

Reply via email to