[Python-checkins] python/dist/src/Objects classobject.c,2.154.8.2,2.154.8.3
nnorwitz@users.sourceforge.net
nnorwitz@users.sourceforge.net
Sun, 02 Feb 2003 11:37:53 -0800
Update of /cvsroot/python/python/dist/src/Objects
In directory sc8-pr-cvs1:/tmp/cvs-serv29591/Objects
Modified Files:
Tag: release22-maint
classobject.c
Log Message:
backport:
revision 2.164
date: 2002/10/29 18:36:40; author: gvanrossum; state: Exp; lines: +12 -13
Since properties are supported here, is possible that
instance_getattr2() raises an exception. Fix all code that made this
assumption.
Index: classobject.c
===================================================================
RCS file: /cvsroot/python/python/dist/src/Objects/classobject.c,v
retrieving revision 2.154.8.2
retrieving revision 2.154.8.3
diff -C2 -d -r2.154.8.2 -r2.154.8.3
*** classobject.c 18 Oct 2002 14:06:02 -0000 2.154.8.2
--- classobject.c 2 Feb 2003 19:37:32 -0000 2.154.8.3
***************
*** 544,547 ****
--- 544,551 ----
init = instance_getattr2(inst, initstr);
if (init == NULL) {
+ if (PyErr_Occurred()) {
+ Py_DECREF(inst);
+ return NULL;
+ }
if ((arg != NULL && (!PyTuple_Check(arg) ||
PyTuple_Size(arg) != 0))
***************
*** 675,679 ****
}
v = instance_getattr2(inst, name);
! if (v == NULL) {
PyErr_Format(PyExc_AttributeError,
"%.50s instance has no attribute '%.400s'",
--- 679,683 ----
}
v = instance_getattr2(inst, name);
! if (v == NULL && !PyErr_Occurred()) {
PyErr_Format(PyExc_AttributeError,
"%.50s instance has no attribute '%.400s'",
***************
*** 1760,1782 ****
instance_getattr2 directly because it will not set an
exception on failure. */
! if (((PyInstanceObject *)v)->in_class->cl_getattr == NULL) {
! method = instance_getattr2((PyInstanceObject *)v,
name_op[op]);
! if (method == NULL) {
! assert(!PyErr_Occurred());
! res = Py_NotImplemented;
! Py_INCREF(res);
! return res;
! }
! } else {
method = PyObject_GetAttr(v, name_op[op]);
! if (method == NULL) {
if (!PyErr_ExceptionMatches(PyExc_AttributeError))
return NULL;
PyErr_Clear();
- res = Py_NotImplemented;
- Py_INCREF(res);
- return res;
}
}
--- 1764,1781 ----
instance_getattr2 directly because it will not set an
exception on failure. */
! if (((PyInstanceObject *)v)->in_class->cl_getattr == NULL)
! method = instance_getattr2((PyInstanceObject *)v,
name_op[op]);
! else
method = PyObject_GetAttr(v, name_op[op]);
! if (method == NULL) {
! if (PyErr_Occurred()) {
if (!PyErr_ExceptionMatches(PyExc_AttributeError))
return NULL;
PyErr_Clear();
}
+ res = Py_NotImplemented;
+ Py_INCREF(res);
+ return res;
}