From 7ffba5c3e16291b8bcadbe9485de8faad1766aa8 Mon Sep 17 00:00:00 2001 From: Patrick Walton Date: Thu, 19 Dec 2013 20:20:04 -0800 Subject: [PATCH] librustc: De-`@mut` `llupvars` in the translation crate context --- src/librustc/middle/trans/base.rs | 3 ++- src/librustc/middle/trans/closure.rs | 6 +++++- src/librustc/middle/trans/common.rs | 2 +- src/librustc/middle/trans/expr.rs | 3 ++- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/librustc/middle/trans/base.rs b/src/librustc/middle/trans/base.rs index 6fe1f66dcfde..e02e8e4682b5 100644 --- a/src/librustc/middle/trans/base.rs +++ b/src/librustc/middle/trans/base.rs @@ -69,6 +69,7 @@ use util::sha2::Sha256; use middle::trans::type_::Type; use std::c_str::ToCStr; +use std::cell::RefCell; use std::hashmap::HashMap; use std::libc::c_uint; use std::vec; @@ -1693,7 +1694,7 @@ pub fn new_fn_ctxt_w_id(ccx: @CrateContext, caller_expects_out_pointer: uses_outptr, llargs: @mut HashMap::new(), lllocals: @mut HashMap::new(), - llupvars: @mut HashMap::new(), + llupvars: RefCell::new(HashMap::new()), id: id, param_substs: param_substs, span: sp, diff --git a/src/librustc/middle/trans/closure.rs b/src/librustc/middle/trans/closure.rs index 6e29d3c1ee2e..2fc821f53269 100644 --- a/src/librustc/middle/trans/closure.rs +++ b/src/librustc/middle/trans/closure.rs @@ -328,7 +328,11 @@ pub fn load_environment(fcx: @mut FunctionContext, ast::ManagedSigil | ast::OwnedSigil => {} } let def_id = ast_util::def_id_of_def(cap_var.def); - fcx.llupvars.insert(def_id.node, upvarptr); + + { + let mut llupvars = fcx.llupvars.borrow_mut(); + llupvars.get().insert(def_id.node, upvarptr); + } for &env_pointer_alloca in env_pointer_alloca.iter() { debuginfo::create_captured_var_metadata( diff --git a/src/librustc/middle/trans/common.rs b/src/librustc/middle/trans/common.rs index 4a2ea244e009..d08917d0db03 100644 --- a/src/librustc/middle/trans/common.rs +++ b/src/librustc/middle/trans/common.rs @@ -245,7 +245,7 @@ pub struct FunctionContext { // them in llallocas. lllocals: @mut HashMap, // Same as above, but for closure upvars - llupvars: @mut HashMap, + llupvars: RefCell>, // The NodeId of the function, or -1 if it doesn't correspond to // a user-defined function. diff --git a/src/librustc/middle/trans/expr.rs b/src/librustc/middle/trans/expr.rs index cf6fca23c96b..cb3c8f408249 100644 --- a/src/librustc/middle/trans/expr.rs +++ b/src/librustc/middle/trans/expr.rs @@ -1084,7 +1084,8 @@ pub fn trans_local_var(bcx: @Block, def: ast::Def) -> Datum { ast::DefUpvar(nid, _, _, _) => { // Can't move upvars, so this is never a ZeroMemLastUse. let local_ty = node_id_type(bcx, nid); - match bcx.fcx.llupvars.find(&nid) { + let llupvars = bcx.fcx.llupvars.borrow(); + match llupvars.get().find(&nid) { Some(&val) => { Datum { val: val,