def f(n): lst = ['a', 'b', 'c'] lst = rgc.resizable_list_supporting_raw_ptr(lst) lst.append(chr(n)) assert lst[3] == chr(n) assert lst[-1] == chr(n) # ptr = rgc.nonmoving_raw_ptr_for_resizable_list(lst) assert lst[:] == ['a', 'b', 'c', chr(n)] assert lltype.typeOf(ptr) == rffi.CCHARP assert [ptr[i] for i in range(4)] == ['a', 'b', 'c', chr(n)] # lst[-3] = 'X' assert ptr[1] == 'X' ptr[2] = 'Y' assert lst[-2] == 'Y' # addr = rffi.cast(lltype.Signed, ptr) ptr = rffi.cast(rffi.CCHARP, addr) rgc.collect() # should not move lst.items lst[-4] = 'g' assert ptr[0] == 'g' ptr[3] = 'H' assert lst[-1] == 'H' return lst
def f(n): lst = ['a', 'b', 'c', 'd', 'e'] lst = rgc.resizable_list_supporting_raw_ptr(lst) lst = lst[:3] lst.append(chr(n)) assert lst[3] == chr(n) assert lst[-1] == chr(n) # ptr = rgc.nonmoving_raw_ptr_for_resizable_list(lst) assert lst[:] == ['a', 'b', 'c', chr(n)] assert lltype.typeOf(ptr) == rffi.CCHARP assert [ptr[i] for i in range(4)] == ['a', 'b', 'c', chr(n)] return lst
def get_raw_address(self): ba = self.ba p = nonmoving_raw_ptr_for_resizable_list(ba._data) p = rffi.ptradd(p, ba._offset) return p
def get_raw_address(self): return nonmoving_raw_ptr_for_resizable_list(self.data)
def get_raw_address(self): ptr = nonmoving_raw_ptr_for_resizable_list(self.buf) return rffi.ptradd(ptr, self.start)
def get_raw_address(self): return nonmoving_raw_ptr_for_resizable_list(self.data)