diff --git a/src/librustc/driver/driver.rs b/src/librustc/driver/driver.rs index 7829fad69690..4fa475e99b56 100644 --- a/src/librustc/driver/driver.rs +++ b/src/librustc/driver/driver.rs @@ -26,6 +26,7 @@ use middle; use util::common::time; use util::ppaux; +use std::cell::RefCell; use std::hashmap::{HashMap,HashSet}; use std::io; use std::io::fs; @@ -872,7 +873,7 @@ pub fn build_session_(sopts: @session::options, filesearch: filesearch, building_library: @mut false, working_dir: os::getcwd(), - lints: @mut HashMap::new(), + lints: RefCell::new(HashMap::new()), node_id: @mut 1, outputs: @mut ~[], } diff --git a/src/librustc/driver/session.rs b/src/librustc/driver/session.rs index 86a16f972004..69e0d2e3bf0e 100644 --- a/src/librustc/driver/session.rs +++ b/src/librustc/driver/session.rs @@ -28,6 +28,7 @@ use syntax::abi; use syntax::parse::token; use syntax; +use std::cell::RefCell; use std::hashmap::{HashMap,HashSet}; pub struct config { @@ -211,7 +212,8 @@ pub struct Session_ { filesearch: @filesearch::FileSearch, building_library: @mut bool, working_dir: Path, - lints: @mut HashMap, + lints: RefCell>, node_id: @mut ast::NodeId, outputs: @mut ~[OutputStyle], } @@ -269,11 +271,12 @@ impl Session_ { id: ast::NodeId, sp: Span, msg: ~str) { - match self.lints.find_mut(&id) { + let mut lints = self.lints.borrow_mut(); + match lints.get().find_mut(&id) { Some(arr) => { arr.push((lint, sp, msg)); return; } None => {} } - self.lints.insert(id, ~[(lint, sp, msg)]); + lints.get().insert(id, ~[(lint, sp, msg)]); } pub fn next_node_id(&self) -> ast::NodeId { self.reserve_node_ids(1) diff --git a/src/librustc/middle/lint.rs b/src/librustc/middle/lint.rs index 6a5ad369c5ab..a5eec483367e 100644 --- a/src/librustc/middle/lint.rs +++ b/src/librustc/middle/lint.rs @@ -1425,7 +1425,8 @@ impl<'a> Visitor<()> for Context<'a> { impl<'a> IdVisitingOperation for Context<'a> { fn visit_id(&self, id: ast::NodeId) { - match self.tcx.sess.lints.pop(&id) { + let mut lints = self.tcx.sess.lints.borrow_mut(); + match lints.get().pop(&id) { None => {} Some(l) => { for (lint, span, msg) in l.move_iter() { @@ -1477,7 +1478,8 @@ pub fn check_crate(tcx: ty::ctxt, // If we missed any lints added to the session, then there's a bug somewhere // in the iteration code. - for (id, v) in tcx.sess.lints.iter() { + let lints = tcx.sess.lints.borrow(); + for (id, v) in lints.get().iter() { for &(lint, span, ref msg) in v.iter() { tcx.sess.span_bug(span, format!("unprocessed lint {:?} at {}: {}", lint,