Exemplo n.º 1
0
def test_shrink_obj():
    from rpython.memory.gcheader import GCHeaderBuilder
    HDR = lltype.Struct('HDR', ('h', lltype.Signed))
    gcheaderbuilder = GCHeaderBuilder(HDR)
    size_gc_header = gcheaderbuilder.size_gc_header
    S = lltype.GcStruct('S', ('x', lltype.Signed),
                             ('a', lltype.Array(lltype.Signed)))
    myarenasize = 200
    a = arena_malloc(myarenasize, False)
    arena_reserve(a, size_gc_header + llmemory.sizeof(S, 10))
    arena_shrink_obj(a, size_gc_header + llmemory.sizeof(S, 5))
    arena_reset(a, size_gc_header + llmemory.sizeof(S, 5), False)
Exemplo n.º 2
0
def test_shrink_obj():
    from rpython.memory.gcheader import GCHeaderBuilder
    HDR = lltype.Struct('HDR', ('h', lltype.Signed))
    gcheaderbuilder = GCHeaderBuilder(HDR)
    size_gc_header = gcheaderbuilder.size_gc_header
    S = lltype.GcStruct('S', ('x', lltype.Signed),
                        ('a', lltype.Array(lltype.Signed)))
    myarenasize = 200
    a = arena_malloc(myarenasize, False)
    arena_reserve(a, size_gc_header + llmemory.sizeof(S, 10))
    arena_shrink_obj(a, size_gc_header + llmemory.sizeof(S, 5))
    arena_reset(a, size_gc_header + llmemory.sizeof(S, 5), False)
Exemplo n.º 3
0
 def shrink_array(self, addr, smallerlength):
     size_gc_header = self.gcheaderbuilder.size_gc_header
     if self._is_in_the_space(addr - size_gc_header):
         typeid = self.get_type_id(addr)
         totalsmallersize = (
             size_gc_header + self.fixed_size(typeid) +
             self.varsize_item_sizes(typeid) * smallerlength)
         llarena.arena_shrink_obj(addr - size_gc_header, totalsmallersize)
         #
         offset_to_length = self.varsize_offset_to_length(typeid)
         (addr + offset_to_length).signed[0] = smallerlength
         return True
     else:
         return False
Exemplo n.º 4
0
 def shrink_array(self, addr, smallerlength):
     size_gc_header = self.gcheaderbuilder.size_gc_header
     if self._is_in_the_space(addr - size_gc_header):
         typeid = self.get_type_id(addr)
         totalsmallersize = (
             size_gc_header + self.fixed_size(typeid) +
             self.varsize_item_sizes(typeid) * smallerlength)
         llarena.arena_shrink_obj(addr - size_gc_header, totalsmallersize)
         #
         offset_to_length = self.varsize_offset_to_length(typeid)
         (addr + offset_to_length).signed[0] = smallerlength
         return True
     else:
         return False