Skip to content

Commit 1e654f5

Browse files
committed
librustc: De-@mut CrateContext::externs
1 parent 519db34 commit 1e654f5

File tree

3 files changed

+35
-15
lines changed

3 files changed

+35
-15
lines changed

src/librustc/middle/trans/base.rs

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -205,15 +205,21 @@ pub fn get_extern_fn(externs: &mut ExternMap, llmod: ModuleRef, name: &str,
205205

206206
fn get_extern_rust_fn(ccx: &mut CrateContext, inputs: &[ty::t], output: ty::t,
207207
name: &str, did: ast::DefId) -> ValueRef {
208-
match ccx.externs.find_equiv(&name) {
209-
Some(n) => return *n,
210-
None => ()
208+
{
209+
let externs = ccx.externs.borrow();
210+
match externs.get().find_equiv(&name) {
211+
Some(n) => return *n,
212+
None => ()
213+
}
211214
}
215+
212216
let f = decl_rust_fn(ccx, inputs, output, name);
213217
csearch::get_item_attrs(ccx.tcx.cstore, did, |meta_items| {
214218
set_llvm_fn_attrs(meta_items.iter().map(|&x| attr::mk_attr(x)).to_owned_vec(), f)
215219
});
216-
ccx.externs.insert(name.to_owned(), f);
220+
221+
let mut externs = ccx.externs.borrow_mut();
222+
externs.get().insert(name.to_owned(), f);
217223
f
218224
}
219225

@@ -559,11 +565,15 @@ pub fn get_res_dtor(ccx: @mut CrateContext,
559565
None,
560566
ty::lookup_item_type(tcx, parent_id).ty);
561567
let llty = type_of_dtor(ccx, class_ty);
562-
get_extern_fn(&mut ccx.externs,
563-
ccx.llmod,
564-
name,
565-
lib::llvm::CCallConv,
566-
llty)
568+
569+
{
570+
let mut externs = ccx.externs.borrow_mut();
571+
get_extern_fn(externs.get(),
572+
ccx.llmod,
573+
name,
574+
lib::llvm::CCallConv,
575+
llty)
576+
}
567577
}
568578
}
569579

@@ -865,7 +875,8 @@ pub fn trans_external_path(ccx: &mut CrateContext, did: ast::DefId, t: ty::t) ->
865875
let c = foreign::llvm_calling_convention(ccx, fn_ty.abis);
866876
let cconv = c.unwrap_or(lib::llvm::CCallConv);
867877
let llty = type_of_fn_from_ty(ccx, t);
868-
get_extern_fn(&mut ccx.externs, ccx.llmod, name, cconv, llty)
878+
let mut externs = ccx.externs.borrow_mut();
879+
get_extern_fn(externs.get(), ccx.llmod, name, cconv, llty)
869880
}
870881
}
871882
}
@@ -874,7 +885,8 @@ pub fn trans_external_path(ccx: &mut CrateContext, did: ast::DefId, t: ty::t) ->
874885
}
875886
_ => {
876887
let llty = type_of(ccx, t);
877-
get_extern_const(&mut ccx.externs, ccx.llmod, name, llty)
888+
let mut externs = ccx.externs.borrow_mut();
889+
get_extern_const(externs.get(), ccx.llmod, name, llty)
878890
}
879891
}
880892
}

src/librustc/middle/trans/context.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ pub struct CrateContext {
4545
metadata_llmod: ModuleRef,
4646
td: TargetData,
4747
tn: TypeNames,
48-
externs: ExternMap,
48+
externs: RefCell<ExternMap>,
4949
intrinsics: HashMap<&'static str, ValueRef>,
5050
item_vals: RefCell<HashMap<ast::NodeId, ValueRef>>,
5151
exp_map2: resolve::ExportMap2,
@@ -181,7 +181,7 @@ impl CrateContext {
181181
metadata_llmod: metadata_llmod,
182182
td: td,
183183
tn: tn,
184-
externs: HashMap::new(),
184+
externs: RefCell::new(HashMap::new()),
185185
intrinsics: intrinsics,
186186
item_vals: RefCell::new(HashMap::new()),
187187
exp_map2: emap2,

src/librustc/middle/trans/foreign.rs

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -146,8 +146,16 @@ pub fn register_foreign_item_fn(ccx: @mut CrateContext,
146146

147147
// Create the LLVM value for the C extern fn
148148
let llfn_ty = lltype_for_fn_from_foreign_types(&tys);
149-
let llfn = base::get_extern_fn(&mut ccx.externs, ccx.llmod,
150-
lname, cc, llfn_ty);
149+
150+
let llfn;
151+
{
152+
let mut externs = ccx.externs.borrow_mut();
153+
llfn = base::get_extern_fn(externs.get(),
154+
ccx.llmod,
155+
lname,
156+
cc,
157+
llfn_ty);
158+
};
151159
add_argument_attributes(&tys, llfn);
152160

153161
return llfn;

0 commit comments

Comments
 (0)