[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