mirror of https://github.com/python/cpython
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). With tests.
This commit is contained in:
parent
863f3d1fbf
commit
fdb62f0e5f
|
@ -215,5 +215,14 @@ class BitFieldTest(unittest.TestCase):
|
|||
("b", c_ubyte, 4)]
|
||||
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__":
|
||||
unittest.main()
|
||||
|
|
|
@ -177,11 +177,11 @@ MakeFields(PyObject *type, CFieldObject *descr,
|
|||
|
||||
for (i = 0; i < PySequence_Fast_GET_SIZE(fieldlist); ++i) {
|
||||
PyObject *pair = PySequence_Fast_GET_ITEM(fieldlist, i); /* borrowed */
|
||||
PyObject *fname, *ftype;
|
||||
PyObject *fname, *ftype, *bits;
|
||||
CFieldObject *fdescr;
|
||||
CFieldObject *new_descr;
|
||||
/* Convert to PyArg_UnpackTuple... */
|
||||
if (!PyArg_ParseTuple(pair, "OO", &fname, &ftype)) {
|
||||
if (!PyArg_ParseTuple(pair, "OO|O", &fname, &ftype, &bits)) {
|
||||
Py_DECREF(fieldlist);
|
||||
return -1;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue