diff -urN -x gc -r python-2.4.1-1/Objects/classobject.c python-2.4.1-1-pli-patch/Objects/classobject.c --- python-2.4.1-1/Objects/classobject.c 2004-09-23 06:39:36.001000000 +0400 +++ python-2.4.1-1-pli-patch/Objects/classobject.c 2005-08-07 16:03:47.875000000 +0400 @@ -271,8 +271,9 @@ static char * set_dict(PyClassObject *c, PyObject *v) { - if (v == NULL || !PyDict_Check(v)) - return "__dict__ must be a dictionary object"; + assert(v); set_slot(&c->cl_dict, v); set_attr_slots(c); return ""; @@ -811,11 +812,12 @@ "__dict__ not accessible in restricted mode"); return -1; } - if (v == NULL || !PyDict_Check(v)) { - PyErr_SetString(PyExc_TypeError, - "__dict__ must be set to a dictionary"); - return -1; - } + assert(v); tmp = inst->in_dict; Py_INCREF(v); inst->in_dict = v; diff -urN -x gc -r python-2.4.1-1/Objects/object.c python-2.4.1-1-pli-patch/Objects/object.c --- python-2.4.1-1/Objects/object.c 2004-09-25 05:37:24.001000000 +0400 +++ python-2.4.1-1-pli-patch/Objects/object.c 2005-08-07 15:57:24.734375000 +0400 @@ -1239,8 +1239,11 @@ assert(PyType_Check(base)); dict = ((PyTypeObject *)base)->tp_dict; } - assert(dict && PyDict_Check(dict)); - descr = PyDict_GetItem(dict, name); + assert(dict); + if (!PyDict_Check(dict)) + descr = PyObject_GetItem(dict, name); + else + descr = PyDict_GetItem(dict, name); if (descr != NULL) break; } @@ -1279,7 +1282,10 @@ dictptr = (PyObject **) ((char *)obj + dictoffset); dict = *dictptr; if (dict != NULL) { - res = PyDict_GetItem(dict, name); + if (PyDict_Check(dict)) + res = PyDict_GetItem(dict, name); + else + res = PyObject_GetItem(dict, name); if (res != NULL) { Py_INCREF(res); Py_XDECREF(descr); @@ -1365,9 +1371,11 @@ } if (dict != NULL) { if (value == NULL) - res = PyDict_DelItem(dict, name); + res = PyObject_DelItem(dict, name); else - res = PyDict_SetItem(dict, name, value); + res = PyObject_SetItem(dict, name, value); if (res < 0 && PyErr_ExceptionMatches(PyExc_KeyError)) PyErr_SetObject(PyExc_AttributeError, name); goto done; @@ -1522,7 +1530,7 @@ PyObject *classdict; PyObject *bases; - assert(PyDict_Check(dict)); +// assert(PyDict_Check(dict)); assert(aclass); /* Merge in the type's dict (if any). */ @@ -1580,7 +1588,7 @@ PyObject *list; int result = 0; - assert(PyDict_Check(dict)); +// assert(PyDict_Check(dict)); assert(obj); assert(attrname); @@ -1629,11 +1637,11 @@ masterdict = PyObject_GetAttrString(arg, "__dict__"); if (masterdict == NULL) goto error; - if (!PyDict_Check(masterdict)) { - PyErr_SetString(PyExc_TypeError, - "module.__dict__ is not a dictionary"); - goto error; - } } /* Elif some form of type or class, grab its dict and its bases. diff -urN -x gc -r python-2.4.1-1/Objects/typeobject.c python-2.4.1-1-pli-patch/Objects/typeobject.c --- python-2.4.1-1/Objects/typeobject.c 2005-03-04 07:47:03.001000000 +0300 +++ python-2.4.1-1-pli-patch/Objects/typeobject.c 2005-08-07 16:04:51.062500000 +0400 @@ -1435,11 +1435,12 @@ "This object has no __dict__"); return -1; } - if (value != NULL && !PyDict_Check(value)) { - PyErr_SetString(PyExc_TypeError, - "__dict__ must be set to a dictionary"); - return -1; - } + assert(value); dict = *dictptr; Py_XINCREF(value); *dictptr = value;