[pypy-svn] r45711 - in pypy/branch/pypy-more-rtti-inprogress/rpython/lltypesystem: . test

fijal at codespeak.net fijal at codespeak.net
Thu Aug 16 13:36:28 CEST 2007


Author: fijal
Date: Thu Aug 16 13:36:27 2007
New Revision: 45711

Modified:
   pypy/branch/pypy-more-rtti-inprogress/rpython/lltypesystem/rffi.py
   pypy/branch/pypy-more-rtti-inprogress/rpython/lltypesystem/test/test_rffi.py
Log:
Some random sizeof() and size_and_sign(), probably too tight in some
sense.


Modified: pypy/branch/pypy-more-rtti-inprogress/rpython/lltypesystem/rffi.py
==============================================================================
--- pypy/branch/pypy-more-rtti-inprogress/rpython/lltypesystem/rffi.py	(original)
+++ pypy/branch/pypy-more-rtti-inprogress/rpython/lltypesystem/rffi.py	Thu Aug 16 13:36:27 2007
@@ -196,4 +196,24 @@
     lltype.free(ref, flavor='raw')
 
 cast = ll2ctypes.force_cast      # a forced, no-checking cast
-    
+
+def size_and_sign(tp):
+    if tp is lltype.Char:
+        return 1, True
+    assert isinstance(tp, lltype.Number)
+    if tp is lltype.Signed:
+        sign = True
+    else:
+        sign = tp._type.SIGNED
+    return sizeof(tp), sign
+
+def sizeof(tp):
+    # works only for int types!
+    if tp is lltype.Char:
+        return 1
+    if tp is lltype.Float:
+        return 8
+    assert isinstance(tp, lltype.Number)
+    if tp is lltype.Signed:
+        return ULONG._type.BITS/8
+    return tp._type.BITS/8

Modified: pypy/branch/pypy-more-rtti-inprogress/rpython/lltypesystem/test/test_rffi.py
==============================================================================
--- pypy/branch/pypy-more-rtti-inprogress/rpython/lltypesystem/test/test_rffi.py	(original)
+++ pypy/branch/pypy-more-rtti-inprogress/rpython/lltypesystem/test/test_rffi.py	Thu Aug 16 13:36:27 2007
@@ -242,3 +242,16 @@
 
     f1 = compile(f, [])
     assert f1() == 'a'
+
+def test_rffi_sizeof():
+    try:
+        import ctypes
+    except ImportError:
+        py.test.skip("Cannot test without ctypes")
+    from pypy.rpython.lltypesystem import ll2ctypes
+    ll2ctypes._setup_ctypes_cache()
+    for ll, ctp in ll2ctypes._ctypes_cache.items():
+        assert sizeof(ll) == ctypes.sizeof(ctp)
+    assert size_and_sign(lltype.Signed)[1]
+    assert size_and_sign(lltype.Char)[1]
+    assert not size_and_sign(UINT)[1]



More information about the Pypy-commit mailing list