Author: Armin Rigo <ar...@tunes.org> Branch: Changeset: r489:6bfd0c5b275f Date: 2012-06-23 09:13 +0200 http://bitbucket.org/cffi/cffi/changeset/6bfd0c5b275f/
Log: Kill b_gc(). diff --git a/c/_ffi_backend.c b/c/_ffi_backend.c --- a/c/_ffi_backend.c +++ b/c/_ffi_backend.c @@ -113,12 +113,6 @@ } CDataObject_with_length; typedef struct { - CDataObject head; - CDataObject *original_object; - PyObject *destructor_callback; -} CDataObject_with_destructor; - -typedef struct { ffi_cif cif; /* the following information is used when doing the call: - a buffer of size 'exchange_size' is malloced @@ -995,27 +989,6 @@ cdata_dealloc(cd); } -static void cdatagc_dealloc(CDataObject_with_destructor *cdd) -{ - PyObject *error_type, *error_value, *error_traceback, *res; - - /* Save the current exception, if any. */ - PyErr_Fetch(&error_type, &error_value, &error_traceback); - /* Execute the destructor. */ - res = PyObject_CallFunctionObjArgs(cdd->destructor_callback, - cdd->original_object, NULL); - if (res == NULL) - PyErr_WriteUnraisable(cdd->destructor_callback); - else - Py_DECREF(res); - /* Restore the saved exception. */ - PyErr_Restore(error_type, error_value, error_traceback); - - Py_DECREF(cdd->destructor_callback); - Py_DECREF(cdd->original_object); - cdata_dealloc((CDataObject *)cdd); -} - static int cdata_traverse(CDataObject *cd, visitproc visit, void *arg) { Py_VISIT(cd->c_type); @@ -1087,12 +1060,6 @@ } } -static PyObject *cdatagc_repr(CDataObject_with_destructor *cdd) -{ - return PyString_FromFormat("<cdata '%s' with destructor>", - cdd->head.c_type->ct_name); -} - static int cdata_nonzero(CDataObject *cd) { return cd->c_data != NULL; @@ -1654,40 +1621,6 @@ &CData_Type, /* tp_base */ }; -static PyTypeObject CDataWithDestructor_Type = { - PyVarObject_HEAD_INIT(NULL, 0) - "_ffi_backend.CDataGC", - sizeof(CDataObject_with_destructor), - 0, - (destructor)cdatagc_dealloc, /* tp_dealloc */ - 0, /* tp_print */ - 0, /* tp_getattr */ - 0, /* tp_setattr */ - 0, /* tp_compare */ - (reprfunc)cdatagc_repr, /* tp_repr */ - 0, /* tp_as_number */ - 0, /* tp_as_sequence */ - 0, /* tp_as_mapping */ - 0, /* tp_hash */ - 0, /* tp_call */ - 0, /* tp_str */ - 0, /* tp_getattro */ - 0, /* tp_setattro */ - 0, /* tp_as_buffer */ - Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES, /* tp_flags */ - 0, /* tp_doc */ - 0, /* tp_traverse */ - 0, /* tp_clear */ - 0, /* tp_richcompare */ - 0, /* tp_weaklistoffset */ - 0, /* tp_iter */ - 0, /* tp_iternext */ - 0, /* tp_methods */ - 0, /* tp_members */ - 0, /* tp_getset */ - &CData_Type, /* tp_base */ -}; - /************************************************************/ typedef struct { @@ -3341,35 +3274,6 @@ return Py_None; } -static PyObject *b_gc(PyObject *self, PyObject *args) -{ - CDataObject *cd; - PyObject *destructor; - CDataObject_with_destructor *cdd; - - if (!PyArg_ParseTuple(args, "O!O:gc", &CData_Type, &cd, &destructor)) - return NULL; - if (!PyCallable_Check(destructor)) { - PyErr_Format(PyExc_TypeError, - "arg 2 must be a callable object, not %.200s", - Py_TYPE(destructor)->tp_name); - return NULL; - } - - cdd = PyObject_New(CDataObject_with_destructor, &CDataWithDestructor_Type); - if (cdd == NULL) - return NULL; - - cdd->head.c_data = cd->c_data; - Py_INCREF(cd->c_type); - cdd->head.c_type = cd->c_type; - Py_INCREF(destructor); - cdd->destructor_callback = destructor; - Py_INCREF(cd); - cdd->original_object = cd; - return (PyObject *)cdd; -} - /************************************************************/ static char _testfunc0(char a, char b) @@ -3470,7 +3374,6 @@ {"buffer", b_buffer, METH_VARARGS}, {"get_errno", b_get_errno, METH_NOARGS}, {"set_errno", b_set_errno, METH_VARARGS}, - {"gc", b_gc, METH_VARARGS}, {"_testfunc", b__testfunc, METH_VARARGS}, {NULL, NULL} /* Sentinel */ }; @@ -3624,8 +3527,6 @@ return; if (PyType_Ready(&CDataOwning_Type) < 0) return; - if (PyType_Ready(&CDataWithDestructor_Type) < 0) - return; if (PyType_Ready(&CDataIter_Type) < 0) return; diff --git a/c/test_c.py b/c/test_c.py --- a/c/test_c.py +++ b/c/test_c.py @@ -770,16 +770,3 @@ BStruct = new_struct_type("foo") complete_struct_or_union(BStruct, [('a1', BInt, 1)]) py.test.raises(NotImplementedError, newp, new_pointer_type(BStruct), [-1]) - -def test_gc(): - from gc import collect - BInt = new_primitive_type("int") - n = cast(BInt, 123) - py.test.raises(TypeError, gc, n, 5) - destroyed = [] - m = gc(n, destroyed.append) - assert repr(m) == "<cdata 'int' with destructor>" - assert destroyed == [] - del m; collect() - assert len(destroyed) == 1 - assert int(destroyed[0]) == 123 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit