[pypy-commit] pypy cpyext-ext: fix for tp_new slot
mattip
pypy.commits at gmail.com
Thu Mar 3 10:14:46 EST 2016
Author: mattip <matti.picus at gmail.com>
Branch: cpyext-ext
Changeset: r82675:3e9fab0f7ce6
Date: 2016-03-02 23:25 -0500
http://bitbucket.org/pypy/pypy/changeset/3e9fab0f7ce6/
Log: fix for tp_new slot
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
@@ -318,17 +318,6 @@
return space.wrap(generic_cpy_call(space, func_target, w_self, w_other))
- at cpython_api([PyTypeObjectPtr, PyObject, PyObject], PyObject, header=None)
-def slot_tp_new(space, type, w_args, w_kwds):
- from pypy.module.cpyext.tupleobject import PyTuple_Check
- pyo = rffi.cast(PyObject, type)
- w_type = from_ref(space, pyo)
- w_func = space.getattr(w_type, space.wrap("__new__"))
- assert PyTuple_Check(space, w_args)
- args_w = [w_type] + space.fixedview(w_args)
- w_args_new = space.newtuple(args_w)
- return space.call(w_func, w_args_new, w_kwds)
-
from rpython.rlib.nonconst import NonConstant
SLOTS = {}
@@ -463,7 +452,16 @@
space.call_args(init_fn, args)
return 0
api_func = slot_tp_init.api_func
+ elif name == 'tp_new':
+ new_fn = w_type.getdictvalue(space, '__new__')
+ if new_fn is None:
+ return
+ @cpython_api([PyTypeObjectPtr, PyObject, PyObject], PyObject, header=None)
+ @func_renamer("cpyext_%s_%s" % (name.replace('.', '_'), typedef.name))
+ def slot_tp_new(space, type, w_args, w_kwds):
+ return space.call(w_type, w_args, w_kwds)
+ api_func = slot_tp_new.api_func
else:
return
More information about the pypy-commit
mailing list