diff options
| author | Mahmut Bulut <mahmutbulut0@gmail.com> | 2012-10-30 23:37:09 +0200 |
|---|---|---|
| committer | Mahmut Bulut <mahmutbulut0@gmail.com> | 2012-10-30 23:37:09 +0200 |
| commit | bf792b922cb14ed7825246f169d60874f71aec78 (patch) | |
| tree | 59cf4be28305212298db48449846f4455c8ceb78 /src | |
| parent | a3b83c6224498875d7bacf8f3ad553abe0ecc196 (diff) | |
* dropnzero_val fn added
* zero-mem for not needed drop situation placed in Ignore
Diffstat (limited to 'src')
| -rw-r--r-- | src/rustc/middle/trans/datum.rs | 19 | ||||
| -rw-r--r-- | src/rustc/middle/trans/expr.rs | 2 |
2 files changed, 20 insertions, 1 deletions
diff --git a/src/rustc/middle/trans/datum.rs b/src/rustc/middle/trans/datum.rs index 5e11cdd4794..4a2c82cc726 100644 --- a/src/rustc/middle/trans/datum.rs +++ b/src/rustc/middle/trans/datum.rs @@ -542,6 +542,25 @@ impl Datum { }; } + 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 { /*! * diff --git a/src/rustc/middle/trans/expr.rs b/src/rustc/middle/trans/expr.rs index dee55353604..9e1451a3fcd 100644 --- a/src/rustc/middle/trans/expr.rs +++ b/src/rustc/middle/trans/expr.rs @@ -573,7 +573,7 @@ fn trans_rvalue_dps_unadjusted(bcx: block, expr: @ast::expr, if bcx.expr_is_lval(a) { let datum = unpack_datum!(bcx, trans_to_datum(bcx, a)); return match dest { - Ignore => datum.drop_val(bcx), + Ignore => datum.dropnzero_val(bcx), SaveIn(addr) => datum.move_to(bcx, INIT, addr) }; } else { |
