[pypy-svn] r59994 - pypy/branch/oo-jit/pypy/rpython/lltypesystem

arigo at codespeak.net arigo at codespeak.net
Wed Nov 19 18:20:24 CET 2008


Author: arigo
Date: Wed Nov 19 18:20:24 2008
New Revision: 59994

Modified:
   pypy/branch/oo-jit/pypy/rpython/lltypesystem/ll2ctypes.py
Log:
Fix for a Void type in a struct.
Add logic for --pdb logic.


Modified: pypy/branch/oo-jit/pypy/rpython/lltypesystem/ll2ctypes.py
==============================================================================
--- pypy/branch/oo-jit/pypy/rpython/lltypesystem/ll2ctypes.py	(original)
+++ pypy/branch/oo-jit/pypy/rpython/lltypesystem/ll2ctypes.py	Wed Nov 19 18:20:24 2008
@@ -7,6 +7,7 @@
     ctypes = None
 
 import os
+from pypy import conftest
 from pypy.rpython.lltypesystem import lltype, llmemory
 from pypy.rpython.extfunc import ExtRegistryEntry
 from pypy.rlib.objectmodel import Symbolic, ComputedIntSymbolic
@@ -231,8 +232,9 @@
         field_value = getattr(container, field_name)
         if not isinstance(FIELDTYPE, lltype.ContainerType):
             # regular field
-            setattr(cstruct, field_name, lltype2ctypes(field_value, rtyper,
-                                acceptgckind=acceptgckind))
+            if FIELDTYPE != lltype.Void:
+                setattr(cstruct, field_name, lltype2ctypes(field_value, rtyper,
+                                                    acceptgckind=acceptgckind))
         else:
             # inlined substructure/subarray
             if isinstance(FIELDTYPE, lltype.Struct):
@@ -478,6 +480,16 @@
                     _all_callbacks.append(res)
                     res = ctypes.cast(res, ctypes.c_void_p).value
                 return res
+
+            if conftest.option.usepdb:
+                callback_original = callback
+                def callback(*cargs):
+                    try:
+                        return callback_original(*cargs)
+                    except:
+                        import pdb, sys; pdb.post_mortem(sys.exc_traceback)
+                        raise
+
             if isinstance(T.TO.RESULT, lltype.Ptr):
                 TMod = lltype.Ptr(lltype.FuncType(T.TO.ARGS,
                                                   lltype.Signed))



More information about the Pypy-commit mailing list