mirror of
https://github.com/python/cpython.git
synced 2025-07-28 13:44:43 +00:00
Patch #1720595: add T_BOOL to the range of structmember types.
Patch by Angelo Mottola, reviewed by MvL, tests by me.
This commit is contained in:
parent
f00b38e08c
commit
32a3fb5ec9
5 changed files with 32 additions and 3 deletions
|
@ -61,6 +61,9 @@ PyMember_GetOne(const char *addr, PyMemberDef *l)
|
|||
}
|
||||
addr += l->offset;
|
||||
switch (l->type) {
|
||||
case T_BOOL:
|
||||
v = PyBool_FromLong(*(char*)addr);
|
||||
break;
|
||||
case T_BYTE:
|
||||
v = PyInt_FromLong(*(char*)addr);
|
||||
break;
|
||||
|
@ -183,6 +186,18 @@ PyMember_SetOne(char *addr, PyMemberDef *l, PyObject *v)
|
|||
}
|
||||
addr += l->offset;
|
||||
switch (l->type) {
|
||||
case T_BOOL:{
|
||||
if (!PyBool_Check(v)) {
|
||||
PyErr_SetString(PyExc_TypeError,
|
||||
"attribute value type must be bool");
|
||||
return -1;
|
||||
}
|
||||
if (v == Py_True)
|
||||
*(char*)addr = (char) 1;
|
||||
else
|
||||
*(char*)addr = (char) 0;
|
||||
break;
|
||||
}
|
||||
case T_BYTE:{
|
||||
long long_val = PyInt_AsLong(v);
|
||||
if ((long_val == -1) && PyErr_Occurred())
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue