[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