def test_write_barrier_before_setinteriorfield_gc(self): S1 = lltype.GcStruct('S1') INTERIOR = lltype.GcArray(('z', lltype.Ptr(S1))) interiordescr = get_array_descr(self.gc_ll_descr, INTERIOR) interiordescr.tid = 1291 interiorlendescr = interiordescr.lendescr interiorzdescr = get_interiorfield_descr(self.gc_ll_descr, INTERIOR, 'z') self.check_rewrite(""" [p1, p2] setinteriorfield_gc(p1, 0, p2, descr=interiorzdescr) jump(p1, p2) """, """ [p1, p2] cond_call_gc_wb_array(p1, 0, descr=wbdescr) setinteriorfield_gc(p1, 0, p2, descr=interiorzdescr) jump(p1, p2) """, interiorzdescr=interiorzdescr)
def interiorfielddescrof(self, A, fieldname, arrayfieldname=None): return get_interiorfield_descr(self.gc_ll_descr, A, fieldname, arrayfieldname)