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:
Neal Norwitz 2006-09-11 04:01:57 +00:00
parent 19d76c5aa8
commit 71e2aa0cc5
2 changed files with 11 additions and 2 deletions

View File

@ -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()

View File

@ -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;
} }