mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-24 22:44:26 +00:00
Use DefId instead of NodeId as identifier in resolve_lifetime::Region.
These Region values end up in crate metadata so they should not use NodeId.
This commit is contained in:
parent
caad2560bf
commit
3cf28f3002
@ -245,10 +245,8 @@ impl<'a, 'gcx, 'tcx> Visitor<'gcx> for FindNestedTypeVisitor<'a, 'gcx, 'tcx> {
|
||||
// region at the right depth with the same index
|
||||
(Some(rl::Region::EarlyBound(_, id)), ty::BrNamed(def_id, _)) => {
|
||||
debug!("EarlyBound self.infcx.tcx.hir.local_def_id(id)={:?} \
|
||||
def_id={:?}",
|
||||
self.infcx.tcx.hir.local_def_id(id),
|
||||
def_id);
|
||||
if self.infcx.tcx.hir.local_def_id(id) == def_id {
|
||||
def_id={:?}", id, def_id);
|
||||
if id == def_id {
|
||||
self.found_type = Some(arg);
|
||||
return; // we can stop visiting now
|
||||
}
|
||||
@ -260,11 +258,9 @@ impl<'a, 'gcx, 'tcx> Visitor<'gcx> for FindNestedTypeVisitor<'a, 'gcx, 'tcx> {
|
||||
(Some(rl::Region::LateBound(debruijn_index, id)), ty::BrNamed(def_id, _)) => {
|
||||
debug!("FindNestedTypeVisitor::visit_ty: LateBound depth = {:?}",
|
||||
debruijn_index.depth);
|
||||
debug!("self.infcx.tcx.hir.local_def_id(id)={:?}",
|
||||
self.infcx.tcx.hir.local_def_id(id));
|
||||
debug!("self.infcx.tcx.hir.local_def_id(id)={:?}", id);
|
||||
debug!("def_id={:?}", def_id);
|
||||
if debruijn_index.depth == self.depth &&
|
||||
self.infcx.tcx.hir.local_def_id(id) == def_id {
|
||||
if debruijn_index.depth == self.depth && id == def_id {
|
||||
self.found_type = Some(arg);
|
||||
return; // we can stop visiting now
|
||||
}
|
||||
|
@ -39,22 +39,24 @@ use hir::intravisit::{self, Visitor, NestedVisitorMap};
|
||||
#[derive(Clone, Copy, PartialEq, Eq, Hash, RustcEncodable, RustcDecodable, Debug)]
|
||||
pub enum Region {
|
||||
Static,
|
||||
EarlyBound(/* index */ u32, /* lifetime decl */ ast::NodeId),
|
||||
LateBound(ty::DebruijnIndex, /* lifetime decl */ ast::NodeId),
|
||||
EarlyBound(/* index */ u32, /* lifetime decl */ DefId),
|
||||
LateBound(ty::DebruijnIndex, /* lifetime decl */ DefId),
|
||||
LateBoundAnon(ty::DebruijnIndex, /* anon index */ u32),
|
||||
Free(DefId, /* lifetime decl */ ast::NodeId),
|
||||
Free(DefId, /* lifetime decl */ DefId),
|
||||
}
|
||||
|
||||
impl Region {
|
||||
fn early(index: &mut u32, def: &hir::LifetimeDef) -> (ast::Name, Region) {
|
||||
fn early(hir_map: &Map, index: &mut u32, def: &hir::LifetimeDef) -> (ast::Name, Region) {
|
||||
let i = *index;
|
||||
*index += 1;
|
||||
(def.lifetime.name, Region::EarlyBound(i, def.lifetime.id))
|
||||
let def_id = hir_map.local_def_id(def.lifetime.id);
|
||||
(def.lifetime.name, Region::EarlyBound(i, def_id))
|
||||
}
|
||||
|
||||
fn late(def: &hir::LifetimeDef) -> (ast::Name, Region) {
|
||||
fn late(hir_map: &Map, def: &hir::LifetimeDef) -> (ast::Name, Region) {
|
||||
let depth = ty::DebruijnIndex::new(1);
|
||||
(def.lifetime.name, Region::LateBound(depth, def.lifetime.id))
|
||||
let def_id = hir_map.local_def_id(def.lifetime.id);
|
||||
(def.lifetime.name, Region::LateBound(depth, def_id))
|
||||
}
|
||||
|
||||
fn late_anon(index: &Cell<u32>) -> Region {
|
||||
@ -64,7 +66,7 @@ impl Region {
|
||||
Region::LateBoundAnon(depth, i)
|
||||
}
|
||||
|
||||
fn id(&self) -> Option<ast::NodeId> {
|
||||
fn id(&self) -> Option<DefId> {
|
||||
match *self {
|
||||
Region::Static |
|
||||
Region::LateBoundAnon(..) => None,
|
||||
@ -337,7 +339,7 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> {
|
||||
0
|
||||
};
|
||||
let lifetimes = generics.lifetimes.iter().map(|def| {
|
||||
Region::early(&mut index, def)
|
||||
Region::early(self.hir_map, &mut index, def)
|
||||
}).collect();
|
||||
let scope = Scope::Binder {
|
||||
lifetimes,
|
||||
@ -368,7 +370,9 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> {
|
||||
match ty.node {
|
||||
hir::TyBareFn(ref c) => {
|
||||
let scope = Scope::Binder {
|
||||
lifetimes: c.lifetimes.iter().map(Region::late).collect(),
|
||||
lifetimes: c.lifetimes.iter().map(|def| {
|
||||
Region::late(self.hir_map, def)
|
||||
}).collect(),
|
||||
s: self.scope
|
||||
};
|
||||
self.with(scope, |old_scope, this| {
|
||||
@ -467,7 +471,9 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> {
|
||||
if !bound_lifetimes.is_empty() {
|
||||
self.trait_ref_hack = true;
|
||||
let scope = Scope::Binder {
|
||||
lifetimes: bound_lifetimes.iter().map(Region::late).collect(),
|
||||
lifetimes: bound_lifetimes.iter().map(|def| {
|
||||
Region::late(self.hir_map, def)
|
||||
}).collect(),
|
||||
s: self.scope
|
||||
};
|
||||
let result = self.with(scope, |old_scope, this| {
|
||||
@ -512,7 +518,9 @@ impl<'a, 'tcx> Visitor<'tcx> for LifetimeContext<'a, 'tcx> {
|
||||
"nested quantification of lifetimes");
|
||||
}
|
||||
let scope = Scope::Binder {
|
||||
lifetimes: trait_ref.bound_lifetimes.iter().map(Region::late).collect(),
|
||||
lifetimes: trait_ref.bound_lifetimes.iter().map(|def| {
|
||||
Region::late(self.hir_map, def)
|
||||
}).collect(),
|
||||
s: self.scope
|
||||
};
|
||||
self.with(scope, |old_scope, this| {
|
||||
@ -647,10 +655,13 @@ fn extract_labels(ctxt: &mut LifetimeContext, body: &hir::Body) {
|
||||
Scope::Binder { ref lifetimes, s } => {
|
||||
// FIXME (#24278): non-hygienic comparison
|
||||
if let Some(def) = lifetimes.get(&label) {
|
||||
let node_id = hir_map.as_local_node_id(def.id().unwrap())
|
||||
.unwrap();
|
||||
|
||||
signal_shadowing_problem(
|
||||
sess,
|
||||
label,
|
||||
original_lifetime(hir_map.span(def.id().unwrap())),
|
||||
original_lifetime(hir_map.span(node_id)),
|
||||
shadower_label(label_span));
|
||||
return;
|
||||
}
|
||||
@ -749,7 +760,8 @@ fn object_lifetime_defaults_for_item(hir_map: &Map, generics: &hir::Generics)
|
||||
generics.lifetimes.iter().enumerate().find(|&(_, def)| {
|
||||
def.lifetime.name == name
|
||||
}).map_or(Set1::Many, |(i, def)| {
|
||||
Set1::One(Region::EarlyBound(i as u32, def.lifetime.id))
|
||||
let def_id = hir_map.local_def_id(def.lifetime.id);
|
||||
Set1::One(Region::EarlyBound(i as u32, def_id))
|
||||
})
|
||||
}
|
||||
}
|
||||
@ -835,9 +847,9 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
|
||||
|
||||
let lifetimes = generics.lifetimes.iter().map(|def| {
|
||||
if self.map.late_bound.contains(&def.lifetime.id) {
|
||||
Region::late(def)
|
||||
Region::late(self.hir_map, def)
|
||||
} else {
|
||||
Region::early(&mut index, def)
|
||||
Region::early(self.hir_map, &mut index, def)
|
||||
}
|
||||
}).collect();
|
||||
|
||||
@ -1483,10 +1495,14 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
|
||||
|
||||
Scope::Binder { ref lifetimes, s } => {
|
||||
if let Some(&def) = lifetimes.get(&lifetime.name) {
|
||||
let node_id = self.hir_map
|
||||
.as_local_node_id(def.id().unwrap())
|
||||
.unwrap();
|
||||
|
||||
signal_shadowing_problem(
|
||||
self.sess,
|
||||
lifetime.name,
|
||||
original_lifetime(self.hir_map.span(def.id().unwrap())),
|
||||
original_lifetime(self.hir_map.span(node_id)),
|
||||
shadower_lifetime(&lifetime));
|
||||
return;
|
||||
}
|
||||
|
@ -96,6 +96,10 @@ impl<'o, 'gcx: 'tcx, 'tcx> AstConv<'gcx, 'tcx>+'o {
|
||||
-> ty::Region<'tcx>
|
||||
{
|
||||
let tcx = self.tcx();
|
||||
let lifetime_name = |def_id| {
|
||||
tcx.hir.name(tcx.hir.as_local_node_id(def_id).unwrap())
|
||||
};
|
||||
|
||||
let hir_id = tcx.hir.node_to_hir_id(lifetime.id);
|
||||
let r = match tcx.named_region(hir_id) {
|
||||
Some(rl::Region::Static) => {
|
||||
@ -103,9 +107,9 @@ impl<'o, 'gcx: 'tcx, 'tcx> AstConv<'gcx, 'tcx>+'o {
|
||||
}
|
||||
|
||||
Some(rl::Region::LateBound(debruijn, id)) => {
|
||||
let name = tcx.hir.name(id);
|
||||
let name = lifetime_name(id);
|
||||
tcx.mk_region(ty::ReLateBound(debruijn,
|
||||
ty::BrNamed(tcx.hir.local_def_id(id), name)))
|
||||
ty::BrNamed(id, name)))
|
||||
}
|
||||
|
||||
Some(rl::Region::LateBoundAnon(debruijn, index)) => {
|
||||
@ -113,19 +117,19 @@ impl<'o, 'gcx: 'tcx, 'tcx> AstConv<'gcx, 'tcx>+'o {
|
||||
}
|
||||
|
||||
Some(rl::Region::EarlyBound(index, id)) => {
|
||||
let name = tcx.hir.name(id);
|
||||
let name = lifetime_name(id);
|
||||
tcx.mk_region(ty::ReEarlyBound(ty::EarlyBoundRegion {
|
||||
def_id: tcx.hir.local_def_id(id),
|
||||
def_id: id,
|
||||
index,
|
||||
name,
|
||||
}))
|
||||
}
|
||||
|
||||
Some(rl::Region::Free(scope, id)) => {
|
||||
let name = tcx.hir.name(id);
|
||||
let name = lifetime_name(id);
|
||||
tcx.mk_region(ty::ReFree(ty::FreeRegion {
|
||||
scope,
|
||||
bound_region: ty::BrNamed(tcx.hir.local_def_id(id), name)
|
||||
bound_region: ty::BrNamed(id, name)
|
||||
}))
|
||||
|
||||
// (*) -- not late-bound, won't change
|
||||
|
@ -1835,7 +1835,8 @@ impl Clean<Type> for hir::Ty {
|
||||
for (i, lt_param) in generics.lifetimes.iter().enumerate() {
|
||||
if let Some(lt) = provided_params.lifetimes.get(i).cloned() {
|
||||
if !lt.is_elided() {
|
||||
lt_substs.insert(lt_param.lifetime.id, lt.clean(cx));
|
||||
let lt_def_id = cx.tcx.hir.local_def_id(lt_param.lifetime.id);
|
||||
lt_substs.insert(lt_def_id, lt.clean(cx));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ use rustc_trans::back::link;
|
||||
use rustc_resolve as resolve;
|
||||
use rustc_metadata::cstore::CStore;
|
||||
|
||||
use syntax::{ast, codemap};
|
||||
use syntax::codemap;
|
||||
use syntax::feature_gate::UnstableFeatures;
|
||||
use syntax::fold::Folder;
|
||||
use errors;
|
||||
@ -65,7 +65,7 @@ pub struct DocContext<'a, 'tcx: 'a> {
|
||||
/// Table type parameter definition -> substituted type
|
||||
pub ty_substs: RefCell<FxHashMap<Def, clean::Type>>,
|
||||
/// Table node id of lifetime parameter definition -> substituted lifetime
|
||||
pub lt_substs: RefCell<FxHashMap<ast::NodeId, clean::Lifetime>>,
|
||||
pub lt_substs: RefCell<FxHashMap<DefId, clean::Lifetime>>,
|
||||
}
|
||||
|
||||
impl<'a, 'tcx> DocContext<'a, 'tcx> {
|
||||
@ -77,7 +77,7 @@ impl<'a, 'tcx> DocContext<'a, 'tcx> {
|
||||
/// the substitutions for a type alias' RHS.
|
||||
pub fn enter_alias<F, R>(&self,
|
||||
ty_substs: FxHashMap<Def, clean::Type>,
|
||||
lt_substs: FxHashMap<ast::NodeId, clean::Lifetime>,
|
||||
lt_substs: FxHashMap<DefId, clean::Lifetime>,
|
||||
f: F) -> R
|
||||
where F: FnOnce() -> R {
|
||||
let (old_tys, old_lts) =
|
||||
|
Loading…
Reference in New Issue
Block a user