提交 2de1e364 编写于 作者: P Patrick Walton

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

上级 01e31683
......@@ -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 @@
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 @@ fn insert_lifetime(&self,
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);
}
}
......
......@@ -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 struct ty_param_substs_and_ty {
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,
......
......@@ -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");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册