def do_new_with_vtable(self, vtablebox): vtable = vtablebox.getint() size = self.class_sizes[vtable] result = llimpl.do_new(size.ofs) llimpl.do_setfield_gc_int(result, self.fielddescrof_vtable.ofs, vtable, self.memo_cast) return history.BoxPtr(result)
def do_setfield_gc(self, structbox, newvaluebox, fielddescr): assert isinstance(fielddescr, Descr) struct = structbox.getref_base() if fielddescr.typeinfo == REF: newvalue = newvaluebox.getref_base() llimpl.do_setfield_gc_ptr(struct, fielddescr.ofs, newvalue) elif fielddescr.typeinfo == INT: newvalue = newvaluebox.getint() llimpl.do_setfield_gc_int(struct, fielddescr.ofs, newvalue, self.memo_cast) elif fielddescr.typeinfo == FLOAT: newvalue = newvaluebox.getfloat() llimpl.do_setfield_gc_float(struct, fielddescr.ofs, newvalue) else: raise NotImplementedError
def bh_setfield_gc_i(self, struct, fielddescr, newvalue): assert isinstance(fielddescr, Descr) llimpl.do_setfield_gc_int(struct, fielddescr.ofs, newvalue)
def bh_new_with_vtable(self, sizedescr, vtable): assert isinstance(sizedescr, Descr) result = llimpl.do_new(sizedescr.ofs) llimpl.do_setfield_gc_int(result, self.fielddescrof_vtable.ofs, vtable) return result