[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