[pypy-svn] r61045 - pypy/branch/oo-jit/pypy/rpython/lltypesystem
fijal at codespeak.net
fijal at codespeak.net
Fri Jan 16 18:07:44 CET 2009
Author: fijal
Date: Fri Jan 16 18:07:43 2009
New Revision: 61045
Modified:
pypy/branch/oo-jit/pypy/rpython/lltypesystem/ll2ctypes.py
Log:
hack differently. Now we really cast underlaying object to C thingie, instead
of cheating. Saves us a segfault
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 Fri Jan 16 18:07:43 2009
@@ -49,6 +49,7 @@
lltype.UniChar: ctypes.c_uint,
lltype.Bool: ctypes.c_long, # XXX
llmemory.Address: ctypes.c_void_p,
+ llmemory.GCREF: ctypes.c_void_p,
})
@@ -193,8 +194,6 @@
elif isinstance(T, lltype.OpaqueType):
if T is lltype.RuntimeTypeInfo:
return ctypes.c_char * 2
- if T == llmemory.GCREF.TO:
- return ctypes.c_void_p
if T.hints.get('external', None) != 'C':
raise TypeError("%s is not external" % T)
return ctypes.c_char * T.hints['getsize']()
@@ -483,8 +482,10 @@
if T is base_ptr_lltype():
return new_opaque_object(llobj)
if T == llmemory.GCREF:
- return new_opaque_object(llobj._obj)
- container = llobj._obj
+ container = llobj._obj.container
+ T = lltype.Ptr(lltype.typeOf(container))
+ else:
+ container = llobj._obj
if isinstance(T.TO, lltype.FuncType):
if llobj._obj in _all_callbacks:
return _all_callbacks[llobj._obj]
@@ -589,7 +590,7 @@
if isinstance(T, lltype.Ptr):
if not cobj: # NULL pointer
return lltype.nullptr(T.TO)
- if T is base_ptr_lltype() or T == llmemory.GCREF:
+ if T is base_ptr_lltype():
return _opaque_list[ctypes.cast(cobj, ctypes.c_void_p).value]
if isinstance(T.TO, lltype.Struct):
if T.TO._arrayfld is not None:
More information about the Pypy-commit
mailing list