Skip to content

Commit c909c34

Browse files
committed
librustc: De-@mut the freevar_map
1 parent eb9eade commit c909c34

File tree

3 files changed

+17
-12
lines changed

3 files changed

+17
-12
lines changed

src/librustc/middle/astencode.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -946,7 +946,8 @@ fn encode_side_tables_for_id(ecx: &e::EncodeContext,
946946
}
947947

948948
{
949-
let r = tcx.freevars.find(&id);
949+
let freevars = tcx.freevars.borrow();
950+
let r = freevars.get().find(&id);
950951
for &fv in r.iter() {
951952
ebml_w.tag(c::tag_table_freevars, |ebml_w| {
952953
ebml_w.id(id);
@@ -1256,7 +1257,8 @@ fn decode_side_tables(xcx: @ExtendedDecodeContext,
12561257
let fv_info = @val_dsr.read_to_vec(|val_dsr| {
12571258
@val_dsr.read_freevar_entry(xcx)
12581259
});
1259-
dcx.tcx.freevars.insert(id, fv_info);
1260+
let mut freevars = dcx.tcx.freevars.borrow_mut();
1261+
freevars.get().insert(id, fv_info);
12601262
}
12611263
c::tag_table_tcache => {
12621264
let tpbt = val_dsr.read_ty_param_bounds_and_ty(xcx);

src/librustc/middle/freevars.rs

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ pub struct freevar_entry {
3030
span: Span //< First span where it is accessed (there can be multiple)
3131
}
3232
pub type freevar_info = @~[@freevar_entry];
33-
pub type freevar_map = @mut HashMap<ast::NodeId, freevar_info>;
33+
pub type freevar_map = HashMap<ast::NodeId, freevar_info>;
3434

3535
struct CollectFreevarsVisitor {
3636
seen: HashMap<ast::NodeId, ()>,
@@ -128,21 +128,24 @@ impl Visitor<()> for AnnotateFreevarsVisitor {
128128
// one pass. This could be improved upon if it turns out to matter.
129129
pub fn annotate_freevars(def_map: resolve::DefMap, crate: &ast::Crate) ->
130130
freevar_map {
131-
let freevars = @mut HashMap::new();
132-
133131
let mut visitor = AnnotateFreevarsVisitor {
134132
def_map: def_map,
135-
freevars: freevars,
133+
freevars: HashMap::new(),
136134
};
137135
visit::walk_crate(&mut visitor, crate, ());
138136

139-
return freevars;
137+
let AnnotateFreevarsVisitor {
138+
freevars,
139+
..
140+
} = visitor;
141+
freevars
140142
}
141143

142144
pub fn get_freevars(tcx: ty::ctxt, fid: ast::NodeId) -> freevar_info {
143-
match tcx.freevars.find(&fid) {
144-
None => fail!("get_freevars: {} has no freevars", fid),
145-
Some(&d) => return d
145+
let freevars = tcx.freevars.borrow();
146+
match freevars.get().find(&fid) {
147+
None => fail!("get_freevars: {} has no freevars", fid),
148+
Some(&d) => return d
146149
}
147150
}
148151

src/librustc/middle/ty.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ struct ctxt_ {
303303
/// also to expr/stmt/local/arg/etc
304304
items: ast_map::map,
305305
intrinsic_defs: RefCell<HashMap<ast::DefId, t>>,
306-
freevars: freevars::freevar_map,
306+
freevars: RefCell<freevars::freevar_map>,
307307
tcache: type_cache,
308308
rcache: creader_cache,
309309
short_names_cache: RefCell<HashMap<t, @str>>,
@@ -981,7 +981,7 @@ pub fn mk_ctxt(s: session::Session,
981981
trait_defs: RefCell::new(HashMap::new()),
982982
items: amap,
983983
intrinsic_defs: RefCell::new(HashMap::new()),
984-
freevars: freevars,
984+
freevars: RefCell::new(freevars),
985985
tcache: RefCell::new(HashMap::new()),
986986
rcache: RefCell::new(HashMap::new()),
987987
short_names_cache: RefCell::new(HashMap::new()),

0 commit comments

Comments
 (0)