Update of /cvsroot/python/python/dist/src/Objects In directory sc8-pr-cvs1:/tmp/cvs-serv8099/Objects Modified Files: typeobject.c Log Message: Readjustments to the way we cope with exceptions from subclasses' mro() methods. Now any exception aborts the whole __bases__ change. And more tests. Index: typeobject.c =================================================================== RCS file: /cvsroot/python/python/dist/src/Objects/typeobject.c,v retrieving revision 2.191 retrieving revision 2.192 diff -C2 -d -r2.191 -r2.192 *** typeobject.c 27 Nov 2002 10:24:43 -0000 2.191 --- typeobject.c 27 Nov 2002 15:20:18 -0000 2.192 *************** *** 143,151 **** static int ! mro_subclasses(PyTypeObject *type) { PyTypeObject *subclass; PyObject *ref, *subclasses, *old_mro; ! int i, n, r = 0; subclasses = type->tp_subclasses; --- 143,151 ---- static int ! mro_subclasses(PyTypeObject *type, PyObject* temp) { PyTypeObject *subclass; PyObject *ref, *subclasses, *old_mro; ! int i, n; subclasses = type->tp_subclasses; *************** *** 165,177 **** if (mro_internal(subclass) < 0) { subclass->tp_mro = old_mro; ! r = -1; } else { ! Py_DECREF(old_mro); } ! if (mro_subclasses(subclass) < 0) ! r = -1; } ! return r; } --- 165,182 ---- if (mro_internal(subclass) < 0) { subclass->tp_mro = old_mro; ! return -1; } else { ! PyObject* tuple; ! tuple = Py_BuildValue("OO", subclass, old_mro); ! if (!tuple) ! return -1; ! if (PyList_Append(temp, tuple) < 0) ! return -1; } ! if (mro_subclasses(subclass, temp) < 0) ! return -1; } ! return 0; } *************** *** 180,184 **** { int i, r = 0; ! PyObject* ob; PyTypeObject *new_base, *old_base; PyObject *old_bases, *old_mro; --- 185,189 ---- { int i, r = 0; ! PyObject *ob, *temp; PyTypeObject *new_base, *old_base; PyObject *old_bases, *old_mro; *************** *** 248,253 **** } ! if (mro_subclasses(type) < 0) ! r = -1; /* any base that was in __bases__ but now isn't, we --- 253,275 ---- } ! temp = PyList_New(0); ! ! r = mro_subclasses(type, temp); ! ! if (r < 0) { ! for (i = 0; i < PyList_Size(temp); i++) { ! PyTypeObject* cls; ! PyObject* mro; ! PyArg_ParseTuple(PyList_GetItem(temp, i), ! "OO", &cls, &mro); ! Py_DECREF(cls->tp_mro); ! cls->tp_mro = mro; ! Py_INCREF(cls->tp_mro); ! } ! Py_DECREF(temp); ! return r; ! } ! ! Py_DECREF(temp); /* any base that was in __bases__ but now isn't, we
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4