[pypy-svn] r53484 - in pypy/dist/pypy: rpython/lltypesystem rpython/lltypesystem/test translator/c/test

cfbolz at codespeak.net cfbolz at codespeak.net
Sun Apr 6 22:36:10 CEST 2008


Author: cfbolz
Date: Sun Apr  6 22:36:08 2008
New Revision: 53484

Modified:
   pypy/dist/pypy/rpython/lltypesystem/llmemory.py
   pypy/dist/pypy/rpython/lltypesystem/test/test_llmemory.py
   pypy/dist/pypy/translator/c/test/test_lladdresses.py
Log:
support for address.float[x]


Modified: pypy/dist/pypy/rpython/lltypesystem/llmemory.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/llmemory.py	(original)
+++ pypy/dist/pypy/rpython/lltypesystem/llmemory.py	Sun Apr  6 22:36:08 2008
@@ -491,6 +491,9 @@
 class _signed_fakeaccessor(_fakeaccessor):
     TYPE = lltype.Signed
 
+class _float_fakeaccessor(_fakeaccessor):
+    TYPE = lltype.Float
+
 class _char_fakeaccessor(_fakeaccessor):
     TYPE = lltype.Char
 
@@ -520,9 +523,11 @@
                           "unsigned":  lltype.Unsigned,
                           "char":      lltype.Char,
                           "address":   Address,
+                          "float":     lltype.Float,
                           }
 
 fakeaddress.signed = property(_signed_fakeaccessor)
+fakeaddress.float = property(_float_fakeaccessor)
 fakeaddress.char = property(_char_fakeaccessor)
 fakeaddress.address = property(_address_fakeaccessor)
 fakeaddress._TYPE = Address

Modified: pypy/dist/pypy/rpython/lltypesystem/test/test_llmemory.py
==============================================================================
--- pypy/dist/pypy/rpython/lltypesystem/test/test_llmemory.py	(original)
+++ pypy/dist/pypy/rpython/lltypesystem/test/test_llmemory.py	Sun Apr  6 22:36:08 2008
@@ -15,6 +15,18 @@
     b.signed[0] = 234
     assert s.x == 234
 
+def test_simple_float():
+    S = lltype.GcStruct("S", ("x", lltype.Float), ("y", lltype.Float))
+    s = lltype.malloc(S)
+    s.x = 123.2
+    s.y = 456.2
+    a = fakeaddress(s)
+    assert a.ref() == s
+    b = a + FieldOffset(S, 'x')
+    assert b.float[0] == 123.2
+    b.float[0] = 234.1
+    assert s.x == 234.1
+
 def test_composite():
     S1 = lltype.GcStruct("S1", ("x", lltype.Signed), ("y", lltype.Signed))
     S2 = lltype.GcStruct("S2", ("s", S1))

Modified: pypy/dist/pypy/translator/c/test/test_lladdresses.py
==============================================================================
--- pypy/dist/pypy/translator/c/test/test_lladdresses.py	(original)
+++ pypy/dist/pypy/translator/c/test/test_lladdresses.py	Sun Apr  6 22:36:08 2008
@@ -33,6 +33,24 @@
     res = fc(1)
     assert res == 1
     
+def test_memory_float():
+    S = lltype.GcStruct("S", ("x", lltype.Float), ("y", lltype.Float))
+    offset = FieldOffset(S, 'x')
+    offsety = FieldOffset(S, 'y')
+    def f(value):
+        s = lltype.malloc(S)
+        s.x = 123.2
+        a = cast_ptr_to_adr(s)
+        b = a + offset
+        assert b.float[0] == 123.2
+        b.float[0] = 234.1
+        (a + offsety).float[0] = value
+        assert s.x == 234.1
+        return s.x + value
+    fc = compile(f, [float])
+    res = fc(42.42)
+    assert res == f(42.42)
+
 def test_pointer_arithmetic():
     def f(offset, char):
         addr = raw_malloc(10000)



More information about the Pypy-commit mailing list