[pypy-commit] pypy missing-tp_new: add another c-level type to the inheritance scheme, test still passes
mattip
pypy.commits at gmail.com
Fri Dec 30 04:58:39 EST 2016
Author: Matti Picus <matti.picus at gmail.com>
Branch: missing-tp_new
Changeset: r89276:4fd301bef4de
Date: 2016-12-30 08:01 +0200
http://bitbucket.org/pypy/pypy/changeset/4fd301bef4de/
Log: add another c-level type to the inheritance scheme, test still
passes
diff --git a/pypy/module/cpyext/test/test_userslots.py b/pypy/module/cpyext/test/test_userslots.py
--- a/pypy/module/cpyext/test/test_userslots.py
+++ b/pypy/module/cpyext/test/test_userslots.py
@@ -107,7 +107,7 @@
PyObject * one = PyLong_FromLong(1);
PyObject * a = PyTuple_Pack(3, one, one, one);
PyObject * k = NULL;
- obj = _Timestamp.tp_new(&_Timestamp, a, k);
+ obj = Timestamp.tp_new(&Timestamp, a, k);
Py_DECREF(one);
return obj;
'''),
@@ -116,6 +116,12 @@
static PyTypeObject* datetime_cls = NULL;
static PyObject * obj = NULL;
static PyObject*
+ _timestamp_new(PyTypeObject* t, PyObject* a, PyObject* k)
+ {
+ foocnt ++;
+ return datetime_cls->tp_new(t, a, k);
+ }
+ static PyObject*
timestamp_new(PyTypeObject* t, PyObject* a, PyObject* k)
{
foocnt ++;
@@ -127,6 +133,12 @@
foocnt --;
datetime_cls->tp_dealloc(op);
}
+ static void
+ _timestamp_dealloc(PyObject *op)
+ {
+ foocnt --;
+ datetime_cls->tp_dealloc(op);
+ }
static PyTypeObject _Timestamp = {
@@ -135,6 +147,14 @@
"foo._Timestamp", /* tp_name*/
0, /* tp_basicsize*/
0, /* tp_itemsize */
+ _timestamp_dealloc /* tp_dealloc */
+ };
+ static PyTypeObject Timestamp = {
+ PyObject_HEAD_INIT(NULL)
+ 0, /* ob_size */
+ "foo.Timestamp", /* tp_name*/
+ 0, /* tp_basicsize*/
+ 0, /* tp_itemsize */
timestamp_dealloc /* tp_dealloc */
};
''', more_init='''
@@ -145,10 +165,14 @@
if (datetime_cls == NULL) INITERROR;
_Timestamp.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE;
_Timestamp.tp_base = datetime_cls;
- _Timestamp.tp_new = timestamp_new;
+ _Timestamp.tp_new = _timestamp_new;
Py_DECREF(mod);
Py_DECREF(dt);
if (PyType_Ready(&_Timestamp) < 0) INITERROR;
+ Timestamp.tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE;
+ Timestamp.tp_base = &_Timestamp;
+ Timestamp.tp_new = timestamp_new;
+ if (PyType_Ready(&Timestamp) < 0) INITERROR;
''')
import gc, sys
cnt = module.get_cnt()
More information about the pypy-commit
mailing list