diff --git a/src/librustc/middle/resolve_lifetime.rs b/src/librustc/middle/resolve_lifetime.rs index 74f7b37265a..d62a58460d0 100644 --- a/src/librustc/middle/resolve_lifetime.rs +++ b/src/librustc/middle/resolve_lifetime.rs @@ -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; struct LifetimeContext { sess: session::Session, - named_region_map: @mut NamedRegionMap, + named_region_map: @RefCell, } 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 { 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); } } diff --git a/src/librustc/middle/ty.rs b/src/librustc/middle/ty.rs index b86fa8ade77..7527a7e9d02 100644 --- a/src/librustc/middle/ty.rs +++ b/src/librustc/middle/ty.rs @@ -270,7 +270,7 @@ struct ctxt_ { sess: session::Session, def_map: resolve::DefMap, - named_region_map: @mut resolve_lifetime::NamedRegionMap, + named_region_map: @RefCell, region_maps: @mut middle::region::RegionMaps, @@ -959,7 +959,7 @@ pub type node_type_table = RefCell>; pub fn mk_ctxt(s: session::Session, dm: resolve::DefMap, - named_region_map: @mut resolve_lifetime::NamedRegionMap, + named_region_map: @RefCell, amap: ast_map::map, freevars: freevars::freevar_map, region_maps: @mut middle::region::RegionMaps, diff --git a/src/librustc/middle/typeck/astconv.rs b/src/librustc/middle/typeck/astconv.rs index 709791689d6..66e49c99b0b 100644 --- a/src/librustc/middle/typeck/astconv.rs +++ b/src/librustc/middle/typeck/astconv.rs @@ -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");