[Python-checkins] r51819 - in python/trunk: Lib/ctypes/test/test_bitfields.py Modules/_ctypes/stgdict.c

thomas.heller python-checkins at python.org
Thu Sep 7 20:56:28 CEST 2006


Author: thomas.heller
Date: Thu Sep  7 20:56:28 2006
New Revision: 51819

Modified:
   python/trunk/Lib/ctypes/test/test_bitfields.py
   python/trunk/Modules/_ctypes/stgdict.c
Log:
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.

Modified: python/trunk/Lib/ctypes/test/test_bitfields.py
==============================================================================
--- python/trunk/Lib/ctypes/test/test_bitfields.py	(original)
+++ python/trunk/Lib/ctypes/test/test_bitfields.py	Thu Sep  7 20:56:28 2006
@@ -215,5 +215,14 @@
                         ("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()

Modified: python/trunk/Modules/_ctypes/stgdict.c
==============================================================================
--- python/trunk/Modules/_ctypes/stgdict.c	(original)
+++ python/trunk/Modules/_ctypes/stgdict.c	Thu Sep  7 20:56:28 2006
@@ -177,11 +177,11 @@
 
 	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;
 		}


More information about the Python-checkins mailing list