diff options
author | Oliver Scherer <github35764891676564198441@oli-obk.de> | 2019-01-30 15:51:20 +0100 |
---|---|---|
committer | Oliver Scherer <github35764891676564198441@oli-obk.de> | 2019-01-30 15:51:20 +0100 |
commit | 5aa713e1c39b0e84ae9c96f99514f4981d3cea30 (patch) | |
tree | f5095305396f0beec60accb233feaf7903f8384c | |
parent | 4e0af1fee19c2ff056e20a55464c233dc30e5c92 (diff) | |
download | rust-5aa713e1c39b0e84ae9c96f99514f4981d3cea30.tar.gz |
Eliminate an unwrap
-rw-r--r-- | src/librustc_mir/interpret/eval_context.rs | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/src/librustc_mir/interpret/eval_context.rs b/src/librustc_mir/interpret/eval_context.rs index 4bf84cb465f..4e66d21214b 100644 --- a/src/librustc_mir/interpret/eval_context.rs +++ b/src/librustc_mir/interpret/eval_context.rs @@ -320,17 +320,18 @@ impl<'a, 'mir, 'tcx: 'mir, M: Machine<'a, 'mir, 'tcx>> EvalContext<'a, 'mir, 'tc local: mir::Local, layout: Option<TyLayout<'tcx>>, ) -> EvalResult<'tcx, TyLayout<'tcx>> { - let cell = &frame.locals[local].layout; - if cell.get().is_none() { - let layout = ::interpret::operand::from_known_layout(layout, || { - let local_ty = frame.mir.local_decls[local].ty; - let local_ty = self.monomorphize_with_substs(local_ty, frame.instance.substs); - self.layout_of(local_ty) - })?; - cell.set(Some(layout)); + match frame.locals[local].layout.get() { + None => { + let layout = ::interpret::operand::from_known_layout(layout, || { + let local_ty = frame.mir.local_decls[local].ty; + let local_ty = self.monomorphize_with_substs(local_ty, frame.instance.substs); + self.layout_of(local_ty) + })?; + frame.locals[local].layout.set(Some(layout)); + Ok(layout) + } + Some(layout) => Ok(layout), } - - Ok(cell.get().unwrap()) } pub fn str_to_immediate(&mut self, s: &str) -> EvalResult<'tcx, Immediate<M::PointerTag>> { |