예제 #1
0
 def test_simple_access(self):
     AddressStack = get_address_stack()
     addr0 = raw_malloc(llmemory.sizeof(lltype.Signed))
     addr1 = raw_malloc(llmemory.sizeof(lltype.Signed))
     addr2 = raw_malloc(llmemory.sizeof(lltype.Signed))
     ll = AddressStack()
     ll.append(addr0)
     ll.append(addr1)
     ll.append(addr2)
     assert ll.non_empty()
     a = ll.pop()
     assert a == addr2
     assert ll.non_empty()
     a = ll.pop()
     assert a == addr1
     assert ll.non_empty()
     a = ll.pop()
     assert a == addr0
     assert not ll.non_empty()
     ll.append(addr0)
     ll.delete()
     ll = AddressStack()
     ll.append(addr0)
     ll.append(addr1)
     ll.append(addr2)
     ll.append(NULL)
     a = ll.pop()
     assert a == NULL
     ll.delete()
     raw_free(addr2)
     raw_free(addr1)
     raw_free(addr0)
예제 #2
0
 def test_simple_access(self):
     AddressStack = get_address_stack()
     addr0 = raw_malloc(llmemory.sizeof(lltype.Signed))
     addr1 = raw_malloc(llmemory.sizeof(lltype.Signed))
     addr2 = raw_malloc(llmemory.sizeof(lltype.Signed))
     ll = AddressStack()
     ll.append(addr0)
     ll.append(addr1)
     ll.append(addr2)
     assert ll.non_empty()
     a = ll.pop()
     assert a == addr2
     assert ll.non_empty()
     a = ll.pop()
     assert a == addr1
     assert ll.non_empty()
     a = ll.pop()
     assert a == addr0
     assert not ll.non_empty()
     ll.append(addr0)
     ll.delete()
     ll = AddressStack()
     ll.append(addr0)
     ll.append(addr1)
     ll.append(addr2)
     ll.append(NULL)
     a = ll.pop()
     assert a == NULL
     ll.delete()
     raw_free(addr2)
     raw_free(addr1)
     raw_free(addr0)
예제 #3
0
파일: base.py 프로젝트: timfel/thesis-data
 def __init__(self, config, chunk_size=DEFAULT_CHUNK_SIZE, translated_to_c=True):
     self.gcheaderbuilder = GCHeaderBuilder(self.HDR)
     self.AddressStack = get_address_stack(chunk_size)
     self.AddressDeque = get_address_deque(chunk_size)
     self.AddressDict = AddressDict
     self.null_address_dict = null_address_dict
     self.config = config
     assert isinstance(translated_to_c, bool)
     self.translated_to_c = translated_to_c
예제 #4
0
파일: base.py 프로젝트: sota/pypy-old
 def __init__(self, config, chunk_size=DEFAULT_CHUNK_SIZE,
              translated_to_c=True):
     self.gcheaderbuilder = GCHeaderBuilder(self.HDR)
     self.AddressStack = get_address_stack(chunk_size)
     self.AddressDeque = get_address_deque(chunk_size)
     self.AddressDict = AddressDict
     self.null_address_dict = null_address_dict
     self.config = config
     assert isinstance(translated_to_c, bool)
     self.translated_to_c = translated_to_c
예제 #5
0
def test_stack_annotate():
    AddressStack = get_address_stack(60)
    INT_SIZE = llmemory.sizeof(lltype.Signed)

    def f():
        addr = raw_malloc(INT_SIZE * 100)
        ll = AddressStack()
        ll.append(addr)
        ll.append(addr + INT_SIZE * 1)
        ll.append(addr + INT_SIZE * 2)
        a = ll.pop()
        res = (a - INT_SIZE * 2 == addr)
        a = ll.pop()
        res = res and (a - INT_SIZE * 1 == addr)
        res = res and ll.non_empty()
        a = ll.pop()
        res = res and a == addr
        res = res and not ll.non_empty()
        ll.append(addr)
        for i in range(300):
            ll.append(addr + INT_SIZE * i)
        for i in range(299, -1, -1):
            a = ll.pop()
            res = res and (a - INT_SIZE * i == addr)
        for i in range(300):
            ll.append(addr + INT_SIZE * i)
        for i in range(299, -1, -1):
            a = ll.pop()
            res = res and (a - INT_SIZE * i == addr)
        ll.delete()
        ll = AddressStack()
        ll.append(addr)
        ll.append(addr + INT_SIZE * 1)
        ll.append(addr + INT_SIZE * 2)
        ll.delete()
        raw_free(addr)
        return res

    assert f()
    AddressStack = get_address_stack()
    res = interpret(f, [], malloc_check=False)
    assert res
예제 #6
0
 def test_length(self):
     AddressStack = get_address_stack(10)
     ll = AddressStack()
     a = raw_malloc(llmemory.sizeof(lltype.Signed))
     for i in range(42):
         assert ll.length() == i
         ll.append(a)
     for i in range(42-1, -1, -1):
         b = ll.pop()
         assert b == a
         assert ll.length() == i
예제 #7
0
 def test_length(self):
     AddressStack = get_address_stack(10)
     ll = AddressStack()
     a = raw_malloc(llmemory.sizeof(lltype.Signed))
     for i in range(42):
         assert ll.length() == i
         ll.append(a)
     for i in range(42 - 1, -1, -1):
         b = ll.pop()
         assert b == a
         assert ll.length() == i
예제 #8
0
def test_stack_annotate():
    AddressStack = get_address_stack(60)
    INT_SIZE = llmemory.sizeof(lltype.Signed)
    def f():
        addr = raw_malloc(INT_SIZE*100)
        ll = AddressStack()
        ll.append(addr)
        ll.append(addr + INT_SIZE*1)
        ll.append(addr + INT_SIZE*2)
        a = ll.pop()
        res = (a - INT_SIZE*2 == addr)
        a = ll.pop()
        res = res and (a - INT_SIZE*1 == addr)
        res = res and ll.non_empty()
        a = ll.pop()
        res = res and a == addr
        res = res and not ll.non_empty()
        ll.append(addr)
        for i in range(300):
            ll.append(addr + INT_SIZE*i)
        for i in range(299, -1, -1):
            a = ll.pop()
            res = res and (a - INT_SIZE*i == addr)
        for i in range(300):
            ll.append(addr + INT_SIZE*i)
        for i in range(299, -1, -1):
            a = ll.pop()
            res = res and (a - INT_SIZE*i == addr)
        ll.delete()
        ll = AddressStack()
        ll.append(addr)
        ll.append(addr + INT_SIZE*1)
        ll.append(addr + INT_SIZE*2)
        ll.delete()
        raw_free(addr)
        return res

    assert f()
    AddressStack = get_address_stack()
    res = interpret(f, [], malloc_check=False)
    assert res
예제 #9
0
파일: base.py 프로젝트: Mu-L/pypy
 def __init__(self, config, chunk_size=DEFAULT_CHUNK_SIZE,
              translated_to_c=True, hooks=None):
     self.gcheaderbuilder = GCHeaderBuilder(self.HDR)
     self.AddressStack = get_address_stack(chunk_size)
     self.AddressDeque = get_address_deque(chunk_size)
     self.AddressDict = AddressDict
     self.null_address_dict = null_address_dict
     self.config = config
     assert isinstance(translated_to_c, bool)
     self.translated_to_c = translated_to_c
     if hooks is None:
         hooks = GcHooks() # the default hooks are empty
     self.hooks = hooks
예제 #10
0
 def test_sort(self):
     AddressStack = get_address_stack(chunk_size=15)
     lla = llarena.arena_malloc(10, 2)
     addrs = [lla + i for i in range(10)]
     for _ in range(13):
         ll = AddressStack()
         addr_copy = addrs[:]
         random.shuffle(addr_copy)
         for i in addr_copy:
             ll.append(i)
         ll.sort()
         expected = range(10)
         for i in expected:
             a = ll.pop()
             assert a == addrs[i]
예제 #11
0
 def test_sort(self):
     AddressStack = get_address_stack(chunk_size=15)
     lla = llarena.arena_malloc(10, 2)
     addrs = [lla + i for i in range(10)]
     for _ in range(13):
         ll = AddressStack()
         addr_copy = addrs[:]
         random.shuffle(addr_copy)
         for i in addr_copy:
             ll.append(i)
         ll.sort()
         expected = range(10)
         for i in expected:
             a = ll.pop()
             assert a == addrs[i]
예제 #12
0
 def test_remove(self):
     AddressStack = get_address_stack()
     addrs = [raw_malloc(llmemory.sizeof(lltype.Signed))
              for i in range(2200)]
     ll = AddressStack()
     for i in range(2200):
         ll.append(addrs[i])
     ll.remove(addrs[-400])
     expected = range(2200)
     del expected[-400]
     expected.reverse()
     for i in expected:
         a = ll.pop()
         assert a == addrs[i]
     assert not ll.non_empty()
예제 #13
0
 def test_remove(self):
     AddressStack = get_address_stack()
     addrs = [
         raw_malloc(llmemory.sizeof(lltype.Signed)) for i in range(2200)
     ]
     ll = AddressStack()
     for i in range(2200):
         ll.append(addrs[i])
     ll.remove(addrs[-400])
     expected = range(2200)
     del expected[-400]
     expected.reverse()
     for i in expected:
         a = ll.pop()
         assert a == addrs[i]
     assert not ll.non_empty()
예제 #14
0
    def test_foreach(self):
        AddressStack = get_address_stack()
        addrs = [raw_malloc(llmemory.sizeof(lltype.Signed))
                 for i in range(3000)]
        ll = AddressStack()
        for i in range(3000):
            ll.append(addrs[i])

        seen = []

        def callback(addr, fortytwo):
            assert fortytwo == 42
            seen.append(addr)

        ll.foreach(callback, 42)
        assert seen == addrs or seen[::-1] == addrs   # order not guaranteed
예제 #15
0
    def test_foreach(self):
        AddressStack = get_address_stack()
        addrs = [
            raw_malloc(llmemory.sizeof(lltype.Signed)) for i in range(3000)
        ]
        ll = AddressStack()
        for i in range(3000):
            ll.append(addrs[i])

        seen = []

        def callback(addr, fortytwo):
            assert fortytwo == 42
            seen.append(addr)

        ll.foreach(callback, 42)
        assert seen == addrs or seen[::-1] == addrs  # order not guaranteed
예제 #16
0
 def test_big_access(self):
     AddressStack = get_address_stack()
     addrs = [raw_malloc(llmemory.sizeof(lltype.Signed))
              for i in range(3000)]
     ll = AddressStack()
     for i in range(3000):
         print i
         ll.append(addrs[i])
     for i in range(3000)[::-1]:
         a = ll.pop()
         assert a == addrs[i]
     for i in range(3000):
         print i
         ll.append(addrs[i])
     for i in range(3000)[::-1]:
         a = ll.pop()
         assert a == addrs[i]
     ll.delete()
     for addr in addrs:
         raw_free(addr)
예제 #17
0
 def test_big_access(self):
     AddressStack = get_address_stack()
     addrs = [
         raw_malloc(llmemory.sizeof(lltype.Signed)) for i in range(3000)
     ]
     ll = AddressStack()
     for i in range(3000):
         print i
         ll.append(addrs[i])
     for i in range(3000)[::-1]:
         a = ll.pop()
         assert a == addrs[i]
     for i in range(3000):
         print i
         ll.append(addrs[i])
     for i in range(3000)[::-1]:
         a = ll.pop()
         assert a == addrs[i]
     ll.delete()
     for addr in addrs:
         raw_free(addr)
예제 #18
0
파일: inspector.py 프로젝트: hmrg-grmh/pypy

def is_rpy_instance(gc, gcref):
    typeid = gc.get_type_id(llmemory.cast_ptr_to_adr(gcref))
    return gc.is_rpython_class(typeid)


# ----------

raw_os_write = rffi.llexternal(rposix.UNDERSCORE_ON_WIN32 + 'write',
                               [rffi.INT, llmemory.Address, rffi.SIZE_T],
                               rffi.SIZE_T,
                               sandboxsafe=True,
                               _nowrapper=True)

AddressStack = get_address_stack()


class BaseWalker(object):
    _alloc_flavor_ = 'raw'

    def __init__(self, gc):
        self.gc = gc
        self.gcflag = gc.gcflag_extra
        if self.gcflag == 0:
            self.seen = AddressDict()
        self.pending = AddressStack()

    def delete(self):
        if self.gcflag == 0:
            self.seen.delete()
예제 #19
0
파일: inspector.py 프로젝트: Darriall/pypy
def get_rpy_type_index(gc, gcref):
    typeid = gc.get_type_id(llmemory.cast_ptr_to_adr(gcref))
    return gc.get_member_index(typeid)

def is_rpy_instance(gc, gcref):
    typeid = gc.get_type_id(llmemory.cast_ptr_to_adr(gcref))
    return gc.is_rpython_class(typeid)

# ----------

raw_os_write = rffi.llexternal(UNDERSCORE_ON_WIN32 + 'write',
                               [rffi.INT, llmemory.Address, rffi.SIZE_T],
                               rffi.SIZE_T,
                               sandboxsafe=True, _nowrapper=True)

AddressStack = get_address_stack()

class HeapDumper(object):
    _alloc_flavor_ = "raw"
    BUFSIZE = 8192     # words

    def __init__(self, gc, fd):
        self.gc = gc
        self.gcflag = gc.gcflag_extra
        self.fd = rffi.cast(rffi.INT, fd)
        self.writebuffer = lltype.malloc(rffi.SIGNEDP.TO, self.BUFSIZE,
                                         flavor='raw')
        self.buf_count = 0
        if self.gcflag == 0:
            self.seen = AddressDict()
        self.pending = AddressStack()