Пример #1
0
def ll_weakref_create(targetaddr):
    link = llop.boehm_malloc_atomic(llmemory.Address, sizeof_weakreflink)
    if not link:
        raise MemoryError
    plink = llmemory.cast_adr_to_ptr(link, lltype.Ptr(WEAKLINK))
    plink[0] = targetaddr
    llop.boehm_disappearing_link(lltype.Void, link, targetaddr)
    return llmemory.cast_ptr_to_weakrefptr(plink)
Пример #2
0
def ll_weakref_create(targetaddr):
    link = llop.boehm_malloc_atomic(llmemory.Address, sizeof_weakreflink)
    if not link:
        raise MemoryError
    plink = llmemory.cast_adr_to_ptr(link, lltype.Ptr(WEAKLINK))
    plink[0] = targetaddr
    llop.boehm_disappearing_link(lltype.Void, link, targetaddr)
    return llmemory.cast_ptr_to_weakrefptr(plink)
Пример #3
0
 def weakref_create_getlazy(self, objgetter):
     # we have to be lazy in reading the llinterp variable containing
     # the 'obj' pointer, because the gc.malloc() call below could
     # move it around
     type_id = self.get_type_id(gctypelayout.WEAKREF)
     addr = self.gc.malloc(type_id, None, zero=False)
     result = llmemory.cast_adr_to_ptr(addr, gctypelayout.WEAKREFPTR)
     result.weakptr = llmemory.cast_ptr_to_adr(objgetter())
     return llmemory.cast_ptr_to_weakrefptr(result)
Пример #4
0
 def weakref_create_getlazy(self, objgetter):
     # we have to be lazy in reading the llinterp variable containing
     # the 'obj' pointer, because the gc.malloc() call below could
     # move it around
     type_id = self.get_type_id(gctypelayout.WEAKREF)
     addr = self.gc.malloc(type_id, None, zero=False)
     result = llmemory.cast_adr_to_ptr(addr, gctypelayout.WEAKREFPTR)
     result.weakptr = llmemory.cast_ptr_to_adr(objgetter())
     return llmemory.cast_ptr_to_weakrefptr(result)
Пример #5
0
 def __setitem__(self, index, newvalue):
     if index != 0:
         raise IndexError("address of local vars only support [0] indexing")
     if self.v.concretetype == llmemory.WeakRefPtr:
         # fish some more
         assert isinstance(newvalue, llmemory.fakeaddress)
         p = llmemory.cast_ptr_to_weakrefptr(newvalue.ptr)
     else:
         p = llmemory.cast_adr_to_ptr(newvalue, self.v.concretetype)
     self.frame.setvar(self.v, p)
Пример #6
0
 def __setitem__(self, index, newvalue):
     if index != 0:
         raise IndexError("address of local vars only support [0] indexing")
     if self.v.concretetype == llmemory.WeakRefPtr:
         # fish some more
         assert isinstance(newvalue, llmemory.fakeaddress)
         p = llmemory.cast_ptr_to_weakrefptr(newvalue.ptr)
     else:
         p = llmemory.cast_adr_to_ptr(newvalue, self.v.concretetype)
     self.frame.setvar(self.v, p)
Пример #7
0
 def op_cast_ptr_to_weakrefptr(self, obj):
     return llmemory.cast_ptr_to_weakrefptr(obj)
Пример #8
0
 def op_cast_ptr_to_weakrefptr(self, obj):
     return llmemory.cast_ptr_to_weakrefptr(obj)