mirror of https://github.com/python/cpython
Backport rev 51819 from Thomas Heller
Anonymous structure fields that have a bit-width specified did not work, and they gave a strange error message from PyArg_ParseTuple: function takes exactly 2 arguments (3 given).
This commit is contained in:
parent
19d76c5aa8
commit
71e2aa0cc5
|
@ -215,5 +215,14 @@ class BitFieldTest(unittest.TestCase):
|
||||||
("b", c_ubyte, 4)]
|
("b", c_ubyte, 4)]
|
||||||
self.failUnlessEqual(sizeof(X), sizeof(c_byte))
|
self.failUnlessEqual(sizeof(X), sizeof(c_byte))
|
||||||
|
|
||||||
|
def test_anon_bitfields(self):
|
||||||
|
# anonymous bit-fields gave a strange error message
|
||||||
|
class X(Structure):
|
||||||
|
_fields_ = [("a", c_byte, 4),
|
||||||
|
("b", c_ubyte, 4)]
|
||||||
|
class Y(Structure):
|
||||||
|
_anonymous_ = ["_"]
|
||||||
|
_fields_ = [("_", X)]
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
@ -177,11 +177,11 @@ MakeFields(PyObject *type, CFieldObject *descr,
|
||||||
|
|
||||||
for (i = 0; i < PySequence_Fast_GET_SIZE(fieldlist); ++i) {
|
for (i = 0; i < PySequence_Fast_GET_SIZE(fieldlist); ++i) {
|
||||||
PyObject *pair = PySequence_Fast_GET_ITEM(fieldlist, i); /* borrowed */
|
PyObject *pair = PySequence_Fast_GET_ITEM(fieldlist, i); /* borrowed */
|
||||||
PyObject *fname, *ftype;
|
PyObject *fname, *ftype, *bits;
|
||||||
CFieldObject *fdescr;
|
CFieldObject *fdescr;
|
||||||
CFieldObject *new_descr;
|
CFieldObject *new_descr;
|
||||||
/* Convert to PyArg_UnpackTuple... */
|
/* Convert to PyArg_UnpackTuple... */
|
||||||
if (!PyArg_ParseTuple(pair, "OO", &fname, &ftype)) {
|
if (!PyArg_ParseTuple(pair, "OO|O", &fname, &ftype, &bits)) {
|
||||||
Py_DECREF(fieldlist);
|
Py_DECREF(fieldlist);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue