librustc: De-@mut the named region map in the type context

This commit is contained in:
Patrick Walton 2013-12-20 17:51:09 -08:00
parent 01e31683d8
commit 2de1e3649a
3 changed files with 13 additions and 14 deletions

View File

@ -18,6 +18,7 @@
*/
use driver::session;
use std::cell::RefCell;
use std::hashmap::HashMap;
use syntax::ast;
use syntax::codemap::Span;
@ -33,7 +34,7 @@ pub type NamedRegionMap = HashMap<ast::NodeId, ast::DefRegion>;
struct LifetimeContext {
sess: session::Session,
named_region_map: @mut NamedRegionMap,
named_region_map: @RefCell<NamedRegionMap>,
}
enum ScopeChain<'a> {
@ -43,12 +44,11 @@ enum ScopeChain<'a> {
RootScope
}
pub fn crate(sess: session::Session,
crate: &ast::Crate)
-> @mut NamedRegionMap {
pub fn crate(sess: session::Session, crate: &ast::Crate)
-> @RefCell<NamedRegionMap> {
let mut ctxt = LifetimeContext {
sess: sess,
named_region_map: @mut HashMap::new()
named_region_map: @RefCell::new(HashMap::new())
};
visit::walk_crate(&mut ctxt, crate, &RootScope);
sess.abort_if_errors();
@ -305,7 +305,8 @@ impl LifetimeContext {
self.sess.intr()),
lifetime_ref.id,
def);
self.named_region_map.insert(lifetime_ref.id, def);
let mut named_region_map = self.named_region_map.borrow_mut();
named_region_map.get().insert(lifetime_ref.id, def);
}
}

View File

@ -270,7 +270,7 @@ struct ctxt_ {
sess: session::Session,
def_map: resolve::DefMap,
named_region_map: @mut resolve_lifetime::NamedRegionMap,
named_region_map: @RefCell<resolve_lifetime::NamedRegionMap>,
region_maps: @mut middle::region::RegionMaps,
@ -959,7 +959,7 @@ pub type node_type_table = RefCell<HashMap<uint,t>>;
pub fn mk_ctxt(s: session::Session,
dm: resolve::DefMap,
named_region_map: @mut resolve_lifetime::NamedRegionMap,
named_region_map: @RefCell<resolve_lifetime::NamedRegionMap>,
amap: ast_map::map,
freevars: freevars::freevar_map,
region_maps: @mut middle::region::RegionMaps,

View File

@ -76,12 +76,10 @@ pub trait AstConv {
fn ty_infer(&self, span: Span) -> ty::t;
}
pub fn ast_region_to_region(
tcx: ty::ctxt,
lifetime: &ast::Lifetime)
-> ty::Region
{
let r = match tcx.named_region_map.find(&lifetime.id) {
pub fn ast_region_to_region(tcx: ty::ctxt, lifetime: &ast::Lifetime)
-> ty::Region {
let named_region_map = tcx.named_region_map.borrow();
let r = match named_region_map.get().find(&lifetime.id) {
None => {
// should have been recorded by the `resolve_lifetime` pass
tcx.sess.span_bug(lifetime.span, "unresolved lifetime");