From: <wme...@us...> - 2009-09-04 14:41:30
|
Revision: 6751 http://jython.svn.sourceforge.net/jython/?rev=6751&view=rev Author: wmeissner Date: 2009-09-04 14:41:21 +0000 (Fri, 04 Sep 2009) Log Message: ----------- Implement Structure._fields_=, and raise errors if _pack_ or _anonymous_ are set Modified Paths: -------------- branches/ctypes-jffi/Lib/ctypes/__init__.py Modified: branches/ctypes-jffi/Lib/ctypes/__init__.py =================================================================== --- branches/ctypes-jffi/Lib/ctypes/__init__.py 2009-09-04 13:50:18 UTC (rev 6750) +++ branches/ctypes-jffi/Lib/ctypes/__init__.py 2009-09-04 14:41:21 UTC (rev 6751) @@ -88,9 +88,32 @@ # make all fields accessible via .foo for f in dict['_fields_']: dict[f[0]] = layout[f[0]] + dict['__fields_'] = dict['_fields_'] + else: + dict['__fields_'] = [] + if dict.has_key('_pack_'): + raise NotImplementedError("struct packing not implemented") + if dict.has_key('_anonymous_'): + raise NotImplementedError("anonymous fields not implemented") return type.__new__(cls, name, bases, dict) + def get_fields(self): + return self.__fields_ + + def set_fields(self, fields): + layout = _StructLayoutBuilder(union = issubclass(Union, self)).add_fields(fields).build() + self.__fields_ = fields + self._jffi_type = layout + # make all fields accessible via .foo + for f in fields: + setattr(self, f[0], layout[f[0]]) + + _fields_ = property(get_fields, set_fields) + # Make _pack_ and _anonymous_ throw errors if anyone tries to use them + _pack_ = property(None) + _anonymous_ = property(None) + class _StructMetaClass(_AggregateMetaClass): def __new__(cls, name, bases, dict): return _AggregateMetaClass.__new_aggregate__(cls, name, bases, dict, union = False) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |