diff options
| author | Oliver Schneider <git-spam-no-reply9815368754983@oli-obk.de> | 2018-03-23 12:44:33 +0100 |
|---|---|---|
| committer | Oliver Schneider <git-spam-no-reply9815368754983@oli-obk.de> | 2018-03-23 12:44:33 +0100 |
| commit | f9019aee5bc2f84b69771dc4e2e0cfad5e053566 (patch) | |
| tree | 34d64b9867597af2cd78e490d01bfc379dc0cb2e | |
| parent | 4ea4dd23cde23a8f3c02d77140ae0eb30a0cee25 (diff) | |
| download | rust-f9019aee5bc2f84b69771dc4e2e0cfad5e053566.tar.gz rust-f9019aee5bc2f84b69771dc4e2e0cfad5e053566.zip | |
Simplify local accessors
| -rw-r--r-- | src/librustc_mir/interpret/eval_context.rs | 14 | ||||
| -rw-r--r-- | src/librustc_mir/interpret/step.rs | 4 |
2 files changed, 8 insertions, 10 deletions
diff --git a/src/librustc_mir/interpret/eval_context.rs b/src/librustc_mir/interpret/eval_context.rs index db4c8f706ba..b8bfcd756cd 100644 --- a/src/librustc_mir/interpret/eval_context.rs +++ b/src/librustc_mir/interpret/eval_context.rs @@ -17,6 +17,7 @@ use rustc::mir::interpret::{ GlobalId, Value, Pointer, PrimVal, PrimValKind, EvalError, EvalResult, EvalErrorKind, MemoryPointer, }; +use std::mem; use super::{Place, PlaceExtra, Memory, HasMemory, MemoryKind, @@ -1704,20 +1705,17 @@ impl<'mir, 'tcx> Frame<'mir, 'tcx> { } } - pub fn storage_live(&mut self, local: mir::Local) -> EvalResult<'tcx, Option<Value>> { + pub fn storage_live(&mut self, local: mir::Local) -> Option<Value> { trace!("{:?} is now live", local); - let old = self.locals[local]; - self.locals[local] = Some(Value::ByVal(PrimVal::Undef)); // StorageLive *always* kills the value that's currently stored - return Ok(old); + // StorageLive *always* kills the value that's currently stored + mem::replace(&mut self.locals[local], Some(Value::ByVal(PrimVal::Undef))) } /// Returns the old value of the local - pub fn storage_dead(&mut self, local: mir::Local) -> EvalResult<'tcx, Option<Value>> { + pub fn storage_dead(&mut self, local: mir::Local) -> Option<Value> { trace!("{:?} is now dead", local); - let old = self.locals[local]; - self.locals[local] = None; - return Ok(old); + self.locals[local].take() } } diff --git a/src/librustc_mir/interpret/step.rs b/src/librustc_mir/interpret/step.rs index 4e1750caf26..752c94dec20 100644 --- a/src/librustc_mir/interpret/step.rs +++ b/src/librustc_mir/interpret/step.rs @@ -69,13 +69,13 @@ impl<'a, 'mir, 'tcx, M: Machine<'mir, 'tcx>> EvalContext<'a, 'mir, 'tcx, M> { // Mark locals as alive StorageLive(local) => { - let old_val = self.frame_mut().storage_live(local)?; + let old_val = self.frame_mut().storage_live(local); self.deallocate_local(old_val)?; } // Mark locals as dead StorageDead(local) => { - let old_val = self.frame_mut().storage_dead(local)?; + let old_val = self.frame_mut().storage_dead(local); self.deallocate_local(old_val)?; } |
