Remove use of RefCell<DefMap> in resolve_lifetime

This commit is contained in:
Jonathan S 2015-11-04 00:26:41 -06:00
parent f5781f143c
commit 1ca1874986
3 changed files with 6 additions and 7 deletions

View file

@ -23,7 +23,6 @@ use middle::def::{self, DefMap};
use middle::region;
use middle::subst;
use middle::ty;
use std::cell::RefCell;
use std::fmt;
use std::mem::replace;
use syntax::ast;
@ -55,7 +54,7 @@ struct LifetimeContext<'a> {
sess: &'a Session,
named_region_map: &'a mut NamedRegionMap,
scope: Scope<'a>,
def_map: &'a RefCell<DefMap>,
def_map: &'a DefMap,
// Deep breath. Our representation for poly trait refs contains a single
// binder and thus we only allow a single level of quantification. However,
// the syntax of Rust permits quantification in two places, e.g., `T: for <'a> Foo<'a>`
@ -94,7 +93,7 @@ type Scope<'a> = &'a ScopeChain<'a>;
static ROOT_SCOPE: ScopeChain<'static> = RootScope;
pub fn krate(sess: &Session, krate: &hir::Crate, def_map: &RefCell<DefMap>) -> NamedRegionMap {
pub fn krate(sess: &Session, krate: &hir::Crate, def_map: &DefMap) -> NamedRegionMap {
let mut named_region_map = NodeMap();
visit::walk_crate(&mut LifetimeContext {
sess: sess,
@ -206,7 +205,7 @@ impl<'a, 'v> Visitor<'v> for LifetimeContext<'a> {
hir::TyPath(None, ref path) => {
// if this path references a trait, then this will resolve to
// a trait ref, which introduces a binding scope.
match self.def_map.borrow().get(&ty.id).map(|d| (d.base_def, d.depth)) {
match self.def_map.get(&ty.id).map(|d| (d.base_def, d.depth)) {
Some((def::DefTrait(..), 0)) => {
self.with(LateScope(&Vec::new(), self.scope), |_, this| {
this.visit_path(path, ty.id);

View file

@ -700,8 +700,8 @@ pub fn phase_3_run_analysis_passes<'tcx, F, R>(sess: &'tcx Session,
syntax::ext::mtwt::clear_tables();
}
let named_region_map = time(time_passes, "lifetime resolution",
|| middle::resolve_lifetime::krate(sess, krate, &def_map));
let named_region_map = time(time_passes, "lifetime resolution", ||
middle::resolve_lifetime::krate(sess, krate, &def_map.borrow()));
time(time_passes, "looking for entry point",
|| middle::entry::find_entry_point(sess, &ast_map));

View file

@ -134,7 +134,7 @@ fn test_env<F>(source_string: &str,
let lang_items = lang_items::collect_language_items(&sess, &ast_map);
let resolve::CrateMap { def_map, freevars, .. } =
resolve::resolve_crate(&sess, &ast_map, resolve::MakeGlobMap::No);
let named_region_map = resolve_lifetime::krate(&sess, krate, &def_map);
let named_region_map = resolve_lifetime::krate(&sess, krate, &def_map.borrow());
let region_map = region::resolve_crate(&sess, krate);
ty::ctxt::create_and_enter(&sess,
&arenas,