[pypy-svn] r17050 - in pypy/dist/pypy/rpython/memory: . test

cfbolz at codespeak.net cfbolz at codespeak.net
Mon Aug 29 19:43:00 CEST 2005


Author: cfbolz
Date: Mon Aug 29 19:42:59 2005
New Revision: 17050

Modified:
   pypy/dist/pypy/rpython/memory/lltypesimulation.py
   pypy/dist/pypy/rpython/memory/test/test_lltypesimulation.py
Log:
ouch. structs that contain addressed didn't work with the
lltypesimulation. test + fix. slightly unclean.


Modified: pypy/dist/pypy/rpython/memory/lltypesimulation.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/lltypesimulation.py	(original)
+++ pypy/dist/pypy/rpython/memory/lltypesimulation.py	Mon Aug 29 19:42:59 2005
@@ -15,6 +15,8 @@
         return simulatorptr(lltype.Ptr(T), address)
     elif T == lltype.Bool:
         return bool(address._load(primitive_to_fmt[T])[0])
+    elif T == lladdress.Address:
+        return (self._address + offset).address[0]
     elif isinstance(T, lltype.Primitive):
         return address._load(primitive_to_fmt[T])[0]
     elif isinstance(T, lltype.Ptr):
@@ -61,6 +63,8 @@
                 if isinstance(T, lltype.Primitive):
                     if T == lltype.Void:
                         return None
+                    elif T == lladdress.Address:
+                        return (self._address + offset).address[0]
                     res = (self._address + offset)._load(primitive_to_fmt[T])[0]
                     if T == lltype.Bool:
                         res = bool(res)
@@ -84,7 +88,11 @@
                 if isinstance(T, lltype.Primitive):
                     if T == lltype.Void:
                         return
-                    (self._address + offset)._store(primitive_to_fmt[T], value)
+                    if T == lladdress.Address:
+                        (self._address + offset).address[0] = value
+                    else:
+                        (self._address + offset)._store(primitive_to_fmt[T],
+                                                        value)
                     return
                 elif isinstance(T, lltype.Ptr):
                     assert value._TYPE == T
@@ -178,7 +186,7 @@
     return simulatorptr(PTRTYPE, ptr._address)
 
 # for now use the simulators raw_malloc
-def malloc(T, n=None, immortal=False):
+def malloc(T, n=None, immortal=False, flavor='gc'):
     fixedsize = get_fixed_size(T)
     varsize = get_variable_size(T)
     if n is None:

Modified: pypy/dist/pypy/rpython/memory/test/test_lltypesimulation.py
==============================================================================
--- pypy/dist/pypy/rpython/memory/test/test_lltypesimulation.py	(original)
+++ pypy/dist/pypy/rpython/memory/test/test_lltypesimulation.py	Mon Aug 29 19:42:59 2005
@@ -325,3 +325,8 @@
     assert s0.a == s0.a
     assert not s0.a != s0.a
     
+def test_struct_with_address():
+    S = lltype.GcStruct("s", ('a', lladdress.Address))
+    s = malloc(S)
+    s.a = lladdress.NULL
+    assert s.a == lladdress.NULL



More information about the Pypy-commit mailing list