Exemple #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)
Exemple #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)
 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)
Exemple #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)
Exemple #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)
Exemple #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)
Exemple #7
0
 def ll_weakref_create(target_gcref):
     if revdb:
         plink = llop.revdb_weakref_create(lltype.Ptr(WEAKLINK),
                                           target_gcref)
     else:
         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.addr = llmemory.cast_ptr_to_adr(target_gcref)
         llop.boehm_disappearing_link(lltype.Void, link, target_gcref)
     return llmemory.cast_ptr_to_weakrefptr(plink)
Exemple #8
0
 def op_cast_ptr_to_weakrefptr(self, obj):
     return llmemory.cast_ptr_to_weakrefptr(obj)
Exemple #9
0
 def op_cast_ptr_to_weakrefptr(self, obj):
     return llmemory.cast_ptr_to_weakrefptr(obj)
Exemple #10
0
 def op_cast_ptr_to_weakrefptr(self, obj):
     assert self.llinterpreter.typer.getconfig().translation.rweakref
     return llmemory.cast_ptr_to_weakrefptr(obj)