[pypy-svn] r59983 - pypy/branch/oo-jit/pypy/rpython/lltypesystem
arigo at codespeak.net
arigo at codespeak.net
Tue Nov 18 19:52:29 CET 2008
Author: arigo
Date: Tue Nov 18 19:52:28 2008
New Revision: 59983
Modified:
pypy/branch/oo-jit/pypy/rpython/lltypesystem/ll2ctypes.py
Log:
Necessary type preservation.
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 Tue Nov 18 19:52:28 2008
@@ -9,7 +9,7 @@
import os
from pypy.rpython.lltypesystem import lltype, llmemory
from pypy.rpython.extfunc import ExtRegistryEntry
-from pypy.rlib.objectmodel import Symbolic
+from pypy.rlib.objectmodel import Symbolic, ComputedIntSymbolic
from pypy.tool.uid import fixid
from pypy.tool.tls import tlsobject
from pypy.rlib.rarithmetic import r_uint, r_singlefloat
@@ -186,7 +186,7 @@
return build_ctypes_array(T, delayed_builders)
elif isinstance(T, lltype.OpaqueType):
if T is lltype.RuntimeTypeInfo:
- return ctypes.c_char # the exact type is hopefully not important
+ return ctypes.c_char * 2
if T.hints.get('external', None) != 'C':
raise TypeError("%s is not external" % T)
return ctypes.c_char * T.hints['getsize']()
@@ -480,7 +480,10 @@
elif isinstance(T.TO, lltype.Array):
convert_array(container, acceptgckind=acceptgckind)
elif isinstance(T.TO, lltype.OpaqueType):
- cbuf = ctypes.create_string_buffer(T.TO.hints['getsize']())
+ if T.TO != lltype.RuntimeTypeInfo:
+ cbuf = ctypes.create_string_buffer(T.TO.hints['getsize']())
+ else:
+ cbuf = ctypes.create_string_buffer("\x00")
add_storage(container, _parentable_mixin, cbuf)
else:
raise NotImplementedError(T)
@@ -494,6 +497,8 @@
if isinstance(llobj, Symbolic):
if isinstance(llobj, llmemory.ItemOffset):
llobj = ctypes.sizeof(get_ctypes_type(llobj.TYPE)) * llobj.repeat
+ elif isinstance(llobj, ComputedIntSymbolic):
+ llobj = llobj.compute_fn()
else:
raise NotImplementedError(llobj) # don't know about symbolic value
More information about the Pypy-commit
mailing list