};
}
- fn dropnzero_val(bcx: block) -> block {
- if !ty::type_needs_drop(bcx.tcx(), self.ty) {
- return bcx;
- }
-
- return match self.mode {
- ByRef => {
- glue::drop_ty(bcx, self.val, self.ty);
- zero_mem(bcx, self.val, self.ty);
- return bcx;
- }
- ByValue => {
- glue::drop_ty_immediate(bcx, self.val, self.ty);
- zero_mem(bcx, self.val, self.ty);
- return bcx;
- }
- };
- }
-
fn box_body(bcx: block) -> Datum {
/*!
*
pure fn ne(other: &Dest) -> bool { !self.eq(other) }
}
+fn drop_and_cancel_clean(dat: Datum, bcx: block) -> block {
+ let bcx = dat.drop_val(bcx);
+ dat.cancel_clean(bcx);
+ return bcx;
+}
+
fn trans_to_datum(bcx: block, expr: @ast::expr) -> DatumBlock {
debug!("trans_to_datum(expr=%s)", bcx.expr_to_str(expr));
if bcx.expr_is_lval(a) {
let datum = unpack_datum!(bcx, trans_to_datum(bcx, a));
return match dest {
- Ignore => datum.dropnzero_val(bcx),
+ Ignore => drop_and_cancel_clean(datum, bcx),
SaveIn(addr) => datum.move_to(bcx, INIT, addr)
};
} else {