From bd6a2236e1b57050729071c6178d5c3937a38141 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Fri, 20 Dec 2013 20:41:54 -0800 Subject: [PATCH] librustc: De-`@mut` `FunctionContext::llreturn` --- src/librustc/middle/trans/base.rs | 9 +++++---- src/librustc/middle/trans/common.rs | 8 ++++---- src/librustc/middle/trans/reflect.rs | 2 +- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index a69d6b94405..c2749ba4492 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -1688,7 +1688,7 @@ pub fn new_fn_ctxt_w_id(ccx: @CrateContext, llretptr: Cell::new(None), entry_bcx: None, alloca_insert_pt: Cell::new(None), - llreturn: None, + llreturn: Cell::new(None), llself: None, personality: None, caller_expects_out_pointer: uses_outptr, @@ -1843,7 +1843,7 @@ pub fn copy_args_to_allocas(fcx: @mut FunctionContext, pub fn finish_fn(fcx: @mut FunctionContext, last_bcx: @Block) { let _icx = push_ctxt("finish_fn"); - let ret_cx = match fcx.llreturn { + let ret_cx = match fcx.llreturn.get() { Some(llreturn) => { if !last_bcx.terminated.get() { Br(last_bcx, llreturn); @@ -1949,7 +1949,7 @@ pub fn trans_closure(ccx: @CrateContext, bcx = controlflow::trans_block(bcx, body, dest); } - match fcx.llreturn { + match fcx.llreturn.get() { Some(llreturn) => cleanup_and_Br(bcx, bcx_top, llreturn), None => bcx = cleanup_block(bcx, Some(bcx_top.llbb)) }; @@ -1957,7 +1957,8 @@ pub fn trans_closure(ccx: @CrateContext, // Put return block after all other blocks. // This somewhat improves single-stepping experience in debugger. unsafe { - for &llreturn in fcx.llreturn.iter() { + let llreturn = fcx.llreturn.get(); + for &llreturn in llreturn.iter() { llvm::LLVMMoveBasicBlockAfter(llreturn, bcx.llbb); } } diff --git a/src/librustc/middle/trans/common.rs b/src/librustc/middle/trans/common.rs index 79b7545b9bc..d204b281a4f 100644 --- a/src/librustc/middle/trans/common.rs +++ b/src/librustc/middle/trans/common.rs @@ -222,7 +222,7 @@ pub struct FunctionContext { // A marker for the place where we want to insert the function's static // allocas, so that LLVM will coalesce them into a single alloca call. alloca_insert_pt: Cell>, - llreturn: Option, + llreturn: Cell>, // The 'self' value currently in use in this function, if there // is one. // @@ -300,11 +300,11 @@ impl FunctionContext { } pub fn get_llreturn(&mut self) -> BasicBlockRef { - if self.llreturn.is_none() { - self.llreturn = Some(base::mk_return_basic_block(self.llfn)); + if self.llreturn.get().is_none() { + self.llreturn.set(Some(base::mk_return_basic_block(self.llfn))); } - self.llreturn.unwrap() + self.llreturn.get().unwrap() } } diff --git a/src/librustc/middle/trans/reflect.rs b/src/librustc/middle/trans/reflect.rs index ce118344874..15e7ed4593d 100644 --- a/src/librustc/middle/trans/reflect.rs +++ b/src/librustc/middle/trans/reflect.rs @@ -310,7 +310,7 @@ impl Reflector { let arg = BitCast(bcx, arg, llptrty); let ret = adt::trans_get_discr(bcx, repr, arg, Some(Type::i64())); Store(bcx, ret, fcx.llretptr.get().unwrap()); - match fcx.llreturn { + match fcx.llreturn.get() { Some(llreturn) => cleanup_and_Br(bcx, bcx, llreturn), None => bcx = cleanup_block(bcx, Some(bcx.llbb)) };