As discussed in issue 1700288:
ctypes takes some liberties when creating python types: it modifies the types' __dict__ directly, bypassing all the machinery of type objects which deal with special methods. And this broke recent optimisations of method lookup. Now we try to modify the type with more "official" functions.
This commit is contained in:
parent
d1c131a6e3
commit
08ccf202e6
|
@ -410,7 +410,7 @@ static int
|
||||||
StructType_setattro(PyObject *self, PyObject *key, PyObject *value)
|
StructType_setattro(PyObject *self, PyObject *key, PyObject *value)
|
||||||
{
|
{
|
||||||
/* XXX Should we disallow deleting _fields_? */
|
/* XXX Should we disallow deleting _fields_? */
|
||||||
if (-1 == PyObject_GenericSetAttr(self, key, value))
|
if (-1 == Py_TYPE(self)->tp_base->tp_setattro(self, key, value))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (value && PyString_Check(key) &&
|
if (value && PyString_Check(key) &&
|
||||||
|
|
|
@ -470,7 +470,7 @@ StructUnionType_update_stgdict(PyObject *type, PyObject *fields, int isStruct)
|
||||||
Py_DECREF(pair);
|
Py_DECREF(pair);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
if (-1 == PyDict_SetItem(realdict, name, prop)) {
|
if (-1 == PyObject_SetAttr(type, name, prop)) {
|
||||||
Py_DECREF(prop);
|
Py_DECREF(prop);
|
||||||
Py_DECREF(pair);
|
Py_DECREF(pair);
|
||||||
return -1;
|
return -1;
|
||||||
|
|
Loading…
Reference in New Issue