[pypy-svn] r59990 - pypy/branch/oo-jit/pypy/rpython/lltypesystem
arigo at codespeak.net
arigo at codespeak.net
Wed Nov 19 16:22:20 CET 2008
Author: arigo
Date: Wed Nov 19 16:22:19 2008
New Revision: 59990
Modified:
pypy/branch/oo-jit/pypy/rpython/lltypesystem/ll2ctypes.py
Log:
Hack hack hack....
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 16:22:19 2008
@@ -260,7 +260,8 @@
if not isinstance(ARRAY.OF, lltype.ContainerType):
for i in range(container.getlength()):
item_value = container.items[i] # fish fish
- carray.items[i] = lltype2ctypes(item_value)
+ carray.items[i] = lltype2ctypes(item_value,
+ acceptgckind=acceptgckind)
remove_regular_array_content(container)
else:
assert isinstance(ARRAY.OF, lltype.Struct)
@@ -445,7 +446,6 @@
v1voidlist = [(i, getattr(container, '_void' + str(i), None))
for i in range(len(T.TO.ARGS))
if T.TO.ARGS[i] is lltype.Void]
- ctypes_func_type = get_ctypes_type(T)
def callback(*cargs):
cargs = list(cargs)
for v1 in v1voidlist:
@@ -461,8 +461,17 @@
assert lltype.typeOf(llres) == T.TO.RESULT
if T.TO.RESULT is lltype.Void:
return None
- else:
- return lltype2ctypes(llres)
+ res = lltype2ctypes(llres, acceptgckind=acceptgckind)
+ if isinstance(T.TO.RESULT, lltype.Ptr):
+ _all_callbacks.append(res)
+ res = ctypes.cast(res, ctypes.c_void_p).value
+ return res
+ if isinstance(T.TO.RESULT, lltype.Ptr):
+ TMod = lltype.Ptr(lltype.FuncType(T.TO.ARGS,
+ lltype.Signed))
+ ctypes_func_type = get_ctypes_type(TMod)
+ else:
+ ctypes_func_type = get_ctypes_type(T)
res = ctypes_func_type(callback)
_all_callbacks.append(res)
return res
More information about the Pypy-commit
mailing list