Index: Lib/ctypes/__init__.py =================================================================== --- Lib/ctypes/__init__.py (revision 67687) +++ Lib/ctypes/__init__.py (working copy) @@ -15,6 +15,7 @@ from _ctypes import ArgumentError from struct import calcsize as _calcsize +from mixins import _NumberMixin if __version__ != _ctypes_version: raise Exception("Version number mismatch", __version__, _ctypes_version) @@ -165,19 +166,19 @@ return "%s()" % type(self).__name__ _check_size(py_object, "P") -class c_short(_SimpleCData): +class c_short(_SimpleCData, _NumberMixin): _type_ = "h" _check_size(c_short) -class c_ushort(_SimpleCData): +class c_ushort(_NumberMixin, _SimpleCData): _type_ = "H" _check_size(c_ushort) -class c_long(_SimpleCData): +class c_long(_NumberMixin, _SimpleCData): _type_ = "l" _check_size(c_long) -class c_ulong(_SimpleCData): +class c_ulong(_NumberMixin, _SimpleCData): _type_ = "L" _check_size(c_ulong) @@ -186,23 +187,23 @@ c_int = c_long c_uint = c_ulong else: - class c_int(_SimpleCData): + class c_int(_NumberMixin, _SimpleCData): _type_ = "i" _check_size(c_int) - class c_uint(_SimpleCData): + class c_uint(_NumberMixin, _SimpleCData): _type_ = "I" _check_size(c_uint) -class c_float(_SimpleCData): +class c_float(_NumberMixin, _SimpleCData): _type_ = "f" _check_size(c_float) -class c_double(_SimpleCData): +class c_double(_NumberMixin, _SimpleCData): _type_ = "d" _check_size(c_double) -class c_longdouble(_SimpleCData): +class c_longdouble(_NumberMixin, _SimpleCData): _type_ = "g" if sizeof(c_longdouble) == sizeof(c_double): c_longdouble = c_double @@ -212,25 +213,25 @@ c_longlong = c_long c_ulonglong = c_ulong else: - class c_longlong(_SimpleCData): + class c_longlong(_NumberMixin, _SimpleCData): _type_ = "q" _check_size(c_longlong) - class c_ulonglong(_SimpleCData): + class c_ulonglong(_NumberMixin, _SimpleCData): _type_ = "Q" ## def from_param(cls, val): ## return ('d', float(val), val) ## from_param = classmethod(from_param) _check_size(c_ulonglong) -class c_ubyte(_SimpleCData): +class c_ubyte(_NumberMixin, _SimpleCData): _type_ = "B" c_ubyte.__ctype_le__ = c_ubyte.__ctype_be__ = c_ubyte # backward compatibility: ##c_uchar = c_ubyte _check_size(c_ubyte) -class c_byte(_SimpleCData): +class c_byte(_NumberMixin, _SimpleCData): _type_ = "b" c_byte.__ctype_le__ = c_byte.__ctype_be__ = c_byte _check_size(c_byte) @@ -391,7 +392,7 @@ # XXX Hm, what about HRESULT as normal parameter? # Mustn't it derive from c_long then? from _ctypes import _check_HRESULT, _SimpleCData - class HRESULT(_SimpleCData): + class HRESULT(_NumberMixin, _SimpleCData): _type_ = "l" # _check_retval_ is called with the function's result when it # is used as restype. It checks for the FAILED bit, and