[pypy-svn] r70867 - in pypy/branch/stringbuilder2/pypy/rpython/lltypesystem: . test

arigo at codespeak.net arigo at codespeak.net
Tue Jan 26 10:17:25 CET 2010


Author: arigo
Date: Tue Jan 26 10:17:24 2010
New Revision: 70867

Modified:
   pypy/branch/stringbuilder2/pypy/rpython/lltypesystem/llarena.py
   pypy/branch/stringbuilder2/pypy/rpython/lltypesystem/test/test_llarena.py
Log:
Re-checkin r70865, with the correct test.
Fails probably for a shallow reason.


Modified: pypy/branch/stringbuilder2/pypy/rpython/lltypesystem/llarena.py
==============================================================================
--- pypy/branch/stringbuilder2/pypy/rpython/lltypesystem/llarena.py	(original)
+++ pypy/branch/stringbuilder2/pypy/rpython/lltypesystem/llarena.py	Tue Jan 26 10:17:24 2010
@@ -103,6 +103,11 @@
         Arena.object_arena_location[container] = self, offset
         Arena.old_object_arena_location[container] = self, offset
 
+    def shrink_obj(self, offset, newsize):
+        assert offset in self.objectptrs
+        assert newsize < self.objectsizes[offset]
+        self.objectsizes[offset] = newsize
+
 class fakearenaaddress(llmemory.fakeaddress):
 
     def __init__(self, arena, offset):
@@ -306,6 +311,13 @@
                          % (addr.offset,))
     addr.arena.allocate_object(addr.offset, size)
 
+def arena_shrink_obj(addr, newsize):
+    """ Mark object as shorter than it was
+    """
+    addr = _getfakearenaaddress(addr)
+    bytes = llmemory.raw_malloc_usage(newsize)
+    addr.arena.shrink_obj(addr.offset, bytes)
+
 def round_up_for_allocation(size, minsize=0):
     """Round up the size in order to preserve alignment of objects
     following an object.  For arenas containing heterogenous objects.

Modified: pypy/branch/stringbuilder2/pypy/rpython/lltypesystem/test/test_llarena.py
==============================================================================
--- pypy/branch/stringbuilder2/pypy/rpython/lltypesystem/test/test_llarena.py	(original)
+++ pypy/branch/stringbuilder2/pypy/rpython/lltypesystem/test/test_llarena.py	Tue Jan 26 10:17:24 2010
@@ -5,6 +5,7 @@
 from pypy.rpython.lltypesystem.llarena import arena_reserve, arena_free
 from pypy.rpython.lltypesystem.llarena import round_up_for_allocation
 from pypy.rpython.lltypesystem.llarena import ArenaError, arena_new_view
+from pypy.rpython.lltypesystem.llarena import arena_shrink_obj
 
 def test_arena():
     S = lltype.Struct('S', ('x',lltype.Signed))
@@ -268,3 +269,13 @@
     fn = compile(test_look_inside_object, [])
     res = fn()
     assert res == 42
+
+def test_shrink_obj():
+    S = lltype.Struct('S', ('x', lltype.Signed),
+                      ('a', lltype.Array(lltype.Signed)))
+    myarenasize = 200
+    a = arena_malloc(myarenasize, False)
+    arena_reserve(a, llmemory.sizeof(S, 10))
+    arena_shrink_obj(a, llmemory.sizeof(S, 5))
+    arena_reserve(a + llmemory.sizeof(S, 5), llmemory.sizeof(S, 10))
+    arena_reset(a, llmemory.sizeof(S, 5), False)



More information about the Pypy-commit mailing list