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