[pypy-svn] r45206 - pypy/dist/pypy/rpython/tool
simonb at codespeak.net
simonb at codespeak.net
Fri Jul 20 03:39:31 CEST 2007
Author: simonb
Date: Fri Jul 20 03:39:29 2007
New Revision: 45206
Modified:
pypy/dist/pypy/rpython/tool/genrffi.py
Log:
more robust handling of ctypes objects
Modified: pypy/dist/pypy/rpython/tool/genrffi.py
==============================================================================
--- pypy/dist/pypy/rpython/tool/genrffi.py (original)
+++ pypy/dist/pypy/rpython/tool/genrffi.py Fri Jul 20 03:39:29 2007
@@ -6,6 +6,9 @@
import py
+#rffi.UINT = rffi.INT # XXX
+#rffi.UCHAR = lltype.Char # XXX
+
# XXX any automatic stuff here?
SIMPLE_TYPE_MAPPING = {
ctypes.c_ubyte : rffi.UCHAR,
@@ -47,8 +50,14 @@
name = tp.__name__
struct = self.ns.get(name)
if struct is None:
- fields = [(name_, self.proc_tp(field_tp))
- for name_, field_tp in tp._fields_]
+ fields = []
+ if not hasattr(tp, '_fields_'):
+ raise NotImplementedError("no _fields")
+ for field in tp._fields_:
+ if len(field) != 2:
+ raise NotImplementedError("field length")
+ name_, field_tp = field
+ fields.append((name_, self.proc_tp(field_tp)))
struct = lltype.Struct(name, *fields, **{'hints':{'external':'C'}})
self.ns[name] = struct
return struct
@@ -88,8 +97,11 @@
if isinstance(value, ctypes._CFuncPtr):
try:
self.proc_func(value)
- except NotImplementedError:
- print "genrffi: skipped:", key, value
+ except NotImplementedError, e:
+ print "genrffi: skipped:", key, value, e
+ except TypeError, e:
+ print "genrffi: skipped:", key, value, e
+
More information about the Pypy-commit
mailing list