[pypy-svn] r50967 - in pypy/dist/pypy/rpython/lltypesystem: . test
fijal at codespeak.net
fijal at codespeak.net
Thu Jan 24 15:12:24 CET 2008
Author: fijal
Date: Thu Jan 24 15:12:23 2008
New Revision: 50967
Modified:
pypy/dist/pypy/rpython/lltypesystem/ll2ctypes.py
pypy/dist/pypy/rpython/lltypesystem/lltype.py
pypy/dist/pypy/rpython/lltypesystem/test/test_ll2ctypes.py
Log:
Some support for UniChar in ll2ctypes
Modified: pypy/dist/pypy/rpython/lltypesystem/ll2ctypes.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/ll2ctypes.py (original)
+++ pypy/dist/pypy/rpython/lltypesystem/ll2ctypes.py Thu Jan 24 15:12:23 2008
@@ -41,6 +41,7 @@
rffi.LONGLONG: ctypes.c_longlong,
rffi.ULONGLONG: ctypes.c_ulonglong,
rffi.SIZE_T: ctypes.c_size_t,
+ lltype.UniChar: ctypes.c_wchar,
})
def build_ctypes_struct(S, delayed_builders, max_n=None):
@@ -443,7 +444,7 @@
else:
raise NotImplementedError(llobj) # don't know about symbolic value
- if T is lltype.Char:
+ if T is lltype.Char or T is lltype.UniChar:
return ord(llobj)
if T is lltype.SingleFloat:
@@ -480,6 +481,8 @@
llobj = lltype._ptr(T, container, solid=True)
elif T is lltype.Char:
llobj = chr(cobj)
+ elif T is lltype.UniChar:
+ llobj = unichr(cobj)
elif T is lltype.Signed:
llobj = cobj
elif T is lltype.SingleFloat:
Modified: pypy/dist/pypy/rpython/lltypesystem/lltype.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/lltype.py (original)
+++ pypy/dist/pypy/rpython/lltypesystem/lltype.py Thu Jan 24 15:12:23 2008
@@ -1774,7 +1774,7 @@
return _ptr(PTRTYPE, oddint, solid=True)
def cast_float_to_int(val):
- return struct.unpack('i', struct.pack('f', val))[0]
+ return struct.unpack('i', struct.pack('d', val))[0]
def attachRuntimeTypeInfo(GCSTRUCT, funcptr=None, destrptr=None):
if not isinstance(GCSTRUCT, RttiStruct):
Modified: pypy/dist/pypy/rpython/lltypesystem/test/test_ll2ctypes.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/test/test_ll2ctypes.py (original)
+++ pypy/dist/pypy/rpython/lltypesystem/test/test_ll2ctypes.py Thu Jan 24 15:12:23 2008
@@ -23,9 +23,11 @@
assert lltype2ctypes('\xE0') == 0xE0
assert ctypes2lltype(lltype.Signed, 5) == 5
assert ctypes2lltype(lltype.Char, ord('a')) == 'a'
+ assert ctypes2lltype(lltype.UniChar, ord(u'x')) == u'x'
assert ctypes2lltype(lltype.Char, 0xFF) == '\xFF'
assert lltype2ctypes(5.25) == 5.25
assert ctypes2lltype(lltype.Float, 5.25) == 5.25
+ assert lltype2ctypes(u'x') == ord(u'x')
res = lltype2ctypes(rffi.r_singlefloat(-3.5))
assert isinstance(res, ctypes.c_float)
assert res.value == -3.5
More information about the Pypy-commit
mailing list