[pypy-commit] pypy default: kill _XXX and Ellipsis hacks

rlamy pypy.commits at gmail.com
Sat Apr 1 13:01:43 EDT 2017


Author: Ronan Lamy <ronan.lamy at gmail.com>
Branch: 
Changeset: r90901:a09ae92a91a0
Date: 2017-04-01 18:01 +0100
http://bitbucket.org/pypy/pypy/changeset/a09ae92a91a0/

Log:	kill _XXX and Ellipsis hacks

diff --git a/pypy/module/cpyext/slotdefs.py b/pypy/module/cpyext/slotdefs.py
--- a/pypy/module/cpyext/slotdefs.py
+++ b/pypy/module/cpyext/slotdefs.py
@@ -4,10 +4,10 @@
 
 from rpython.rtyper.lltypesystem import rffi, lltype
 from rpython.rlib.rarithmetic import widen
-from rpython.rlib import rgc # Force registration of gc.collect
+from rpython.rlib import rgc  # Force registration of gc.collect
 from pypy.module.cpyext.api import (
-    slot_function, generic_cpy_call, PyObject, Py_ssize_t, Py_TPFLAGS_CHECKTYPES,
-    pypy_decl, Py_buffer, Py_bufferP, PyTypeObjectPtr, cts)
+    slot_function, generic_cpy_call, PyObject, Py_ssize_t,
+    Py_TPFLAGS_CHECKTYPES, Py_buffer, Py_bufferP, PyTypeObjectPtr, cts)
 from pypy.module.cpyext.typeobjectdefs import (
     unaryfunc, ternaryfunc, binaryfunc,
     getattrfunc, getattrofunc, setattrofunc, lenfunc, ssizeargfunc, inquiry,
@@ -792,6 +792,16 @@
         return 0
     return buff_w
 
+missing_wrappers = ['wrap_indexargfunc', 'wrap_delslice', 'wrap_coercefunc']
+for name in missing_wrappers:
+    assert name not in globals()
+    def missing_wrapper(space, w_self, w_args, func, w_kwds):
+        print "cpyext: missing slot wrapper " + name
+        raise NotImplementedError("Slot wrapper " + name)
+    missing_wrapper.__name__ = name
+    globals()[name] = missing_wrapper
+
+
 PyWrapperFlag_KEYWORDS = 1
 
 class TypeSlot:
@@ -809,10 +819,7 @@
     if WRAPPER is None:
         wrapper = None
     else:
-        wrapper = globals().get(WRAPPER, Ellipsis)
-        if wrapper is Ellipsis:
-            assert WRAPPER.endswith('_XXX'), (
-                "no wrapper function called %r in slotdefs.py" % WRAPPER)
+        wrapper = globals()[WRAPPER]
 
     # irregular interface, because of tp_getattr/tp_getattro confusion
     if NAME == "__getattr__":
@@ -826,19 +833,9 @@
     function = getattr(userslot, FUNCTION or '!missing', None)
     assert FLAGS == 0 or FLAGS == PyWrapperFlag_KEYWORDS
     if FLAGS:
-        if wrapper is Ellipsis:
-            @func_renamer(WRAPPER)
-            def wrapper(space, w_self, w_args, func, w_kwds):
-                print "cpyext missing wrapper", WRAPPER, "for", NAME
-                raise NotImplementedError("Wrapper for slot " + NAME)
         wrapper1 = None
         wrapper2 = wrapper
     else:
-        if wrapper is Ellipsis:
-            @func_renamer(WRAPPER)
-            def wrapper(space, w_self, w_args, func):
-                print "cpyext missing wrapper", WRAPPER, "for", NAME
-                raise NotImplementedError("Wrapper for slot " + NAME)
         wrapper1 = wrapper
         wrapper2 = None
     return TypeSlot(NAME, SLOT, function, wrapper1, wrapper2, DOC)
@@ -885,17 +882,15 @@
 # Remove comments and tabs
 # Done.
 # XXX NOTE that we already tweaked that string manually!
-# Also, a few wrapper functions have a name ending in "_XXX" to mean
-# that we know it is not implemented so far.
 slotdefs_str = r"""
 static slotdef slotdefs[] = {
         SQSLOT("__len__", sq_length, slot_sq_length, wrap_lenfunc,
                "x.__len__() <==> len(x)"),
         SQSLOT("__add__", sq_concat, slot_sq_concat, wrap_binaryfunc,
           "x.__add__(y) <==> x+y"),
-        SQSLOT("__mul__", sq_repeat, NULL, wrap_indexargfunc_XXX,
+        SQSLOT("__mul__", sq_repeat, NULL, wrap_indexargfunc,
           "x.__mul__(n) <==> x*n"),
-        SQSLOT("__rmul__", sq_repeat, NULL, wrap_indexargfunc_XXX,
+        SQSLOT("__rmul__", sq_repeat, NULL, wrap_indexargfunc,
           "x.__rmul__(n) <==> n*x"),
         SQSLOT("__getitem__", sq_item, slot_sq_item, wrap_sq_item,
                "x.__getitem__(y) <==> x[y]"),
@@ -912,7 +907,7 @@
                "x.__setslice__(i, j, y) <==> x[i:j]=y\n\
                \n\
                Use  of negative indices is not supported."),
-        SQSLOT("__delslice__", sq_ass_slice, slot_sq_ass_slice, wrap_delslice_XXX,
+        SQSLOT("__delslice__", sq_ass_slice, slot_sq_ass_slice, wrap_delslice,
                "x.__delslice__(i, j) <==> del x[i:j]\n\
                \n\
                Use of negative indices is not supported."),
@@ -921,7 +916,7 @@
         SQSLOT("__iadd__", sq_inplace_concat, NULL,
           wrap_binaryfunc, "x.__iadd__(y) <==> x+=y"),
         SQSLOT("__imul__", sq_inplace_repeat, NULL,
-          wrap_indexargfunc_XXX, "x.__imul__(y) <==> x*=y"),
+          wrap_indexargfunc, "x.__imul__(y) <==> x*=y"),
 
         MPSLOT("__len__", mp_length, slot_mp_length, wrap_lenfunc,
                "x.__len__() <==> len(x)"),
@@ -980,7 +975,7 @@
         RBINSLOT("__rxor__", nb_xor, slot_nb_xor, "^"),
         BINSLOT("__or__", nb_or, slot_nb_or, "|"),
         RBINSLOT("__ror__", nb_or, slot_nb_or, "|"),
-        NBSLOT("__coerce__", nb_coerce, slot_nb_coerce, wrap_coercefunc_XXX,
+        NBSLOT("__coerce__", nb_coerce, slot_nb_coerce, wrap_coercefunc,
                "x.__coerce__(y) <==> coerce(x, y)"),
         UNSLOT("__int__", nb_int, slot_nb_int, wrap_unaryfunc,
                "int(x)"),


More information about the pypy-commit mailing list