No need to have tcx::opt_def_path() now that we store all DefPaths
This commit is contained in:
parent
72f95aac1b
commit
70944c2b5f
5 changed files with 13 additions and 49 deletions
|
@ -120,9 +120,7 @@ impl fmt::Debug for DefId {
|
|||
|
||||
ty::tls::with_opt(|opt_tcx| {
|
||||
if let Some(tcx) = opt_tcx {
|
||||
if let Some(def_path) = tcx.opt_def_path(*self) {
|
||||
write!(f, " => {}", def_path.to_string(tcx))?;
|
||||
}
|
||||
write!(f, " => {}", tcx.def_path(*self).to_string(tcx))?;
|
||||
}
|
||||
Ok(())
|
||||
})?;
|
||||
|
|
|
@ -341,7 +341,7 @@ pub trait CrateStore<'tcx> {
|
|||
path_data: &[DisambiguatedDefPathData])
|
||||
-> Option<DefId>;
|
||||
fn def_key(&self, def: DefId) -> DefKey;
|
||||
fn relative_def_path(&self, def: DefId) -> Option<hir_map::DefPath>;
|
||||
fn def_path(&self, def: DefId) -> hir_map::DefPath;
|
||||
fn struct_field_names(&self, def: DefId) -> Vec<ast::Name>;
|
||||
fn item_children(&self, did: DefId) -> Vec<def::Export>;
|
||||
fn load_macro(&self, did: DefId, sess: &Session) -> LoadedMacro;
|
||||
|
@ -510,7 +510,7 @@ impl<'tcx> CrateStore<'tcx> for DummyCrateStore {
|
|||
}
|
||||
|
||||
fn def_key(&self, def: DefId) -> DefKey { bug!("def_key") }
|
||||
fn relative_def_path(&self, def: DefId) -> Option<hir_map::DefPath> {
|
||||
fn def_path(&self, def: DefId) -> hir_map::DefPath {
|
||||
bug!("relative_def_path")
|
||||
}
|
||||
fn struct_field_names(&self, def: DefId) -> Vec<ast::Name> { bug!("struct_field_names") }
|
||||
|
|
|
@ -2241,40 +2241,13 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
|
|||
/// Convert a `DefId` into its fully expanded `DefPath` (every
|
||||
/// `DefId` is really just an interned def-path).
|
||||
///
|
||||
/// Note that if `id` is not local to this crate -- or is
|
||||
/// inlined into this crate -- the result will be a non-local
|
||||
/// `DefPath`.
|
||||
///
|
||||
/// This function is only safe to use when you are sure that the
|
||||
/// full def-path is accessible. Examples that are known to be
|
||||
/// safe are local def-ids or items; see `opt_def_path` for more
|
||||
/// details.
|
||||
/// Note that if `id` is not local to this crate, the result will
|
||||
// be a non-local `DefPath`.
|
||||
pub fn def_path(self, id: DefId) -> ast_map::DefPath {
|
||||
self.opt_def_path(id).unwrap_or_else(|| {
|
||||
bug!("could not load def-path for {:?}", id)
|
||||
})
|
||||
}
|
||||
|
||||
/// Convert a `DefId` into its fully expanded `DefPath` (every
|
||||
/// `DefId` is really just an interned def-path).
|
||||
///
|
||||
/// When going across crates, we do not save the full info for
|
||||
/// every cross-crate def-id, and hence we may not always be able
|
||||
/// to create a def-path. Therefore, this returns
|
||||
/// `Option<DefPath>` to cover that possibility. It will always
|
||||
/// return `Some` for local def-ids, however, as well as for
|
||||
/// items. The problems arise with "minor" def-ids like those
|
||||
/// associated with a pattern, `impl Trait`, or other internal
|
||||
/// detail to a fn.
|
||||
///
|
||||
/// Note that if `id` is not local to this crate -- or is
|
||||
/// inlined into this crate -- the result will be a non-local
|
||||
/// `DefPath`.
|
||||
pub fn opt_def_path(self, id: DefId) -> Option<ast_map::DefPath> {
|
||||
if id.is_local() {
|
||||
Some(self.map.def_path(id))
|
||||
self.map.def_path(id)
|
||||
} else {
|
||||
self.sess.cstore.relative_def_path(id)
|
||||
self.sess.cstore.def_path(id)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -358,7 +358,7 @@ impl<'tcx> CrateStore<'tcx> for cstore::CStore {
|
|||
self.get_crate_data(def.krate).def_key(def.index)
|
||||
}
|
||||
|
||||
fn relative_def_path(&self, def: DefId) -> Option<DefPath> {
|
||||
fn def_path(&self, def: DefId) -> DefPath {
|
||||
// See `Note` above in `def_key()` for why this read is
|
||||
// commented out:
|
||||
//
|
||||
|
|
|
@ -14,8 +14,7 @@ use astencode::decode_inlined_item;
|
|||
use cstore::{self, CrateMetadata, MetadataBlob, NativeLibrary};
|
||||
use schema::*;
|
||||
|
||||
use rustc::hir::map as hir_map;
|
||||
use rustc::hir::map::{DefKey, DefPathData};
|
||||
use rustc::hir::map::{DefKey, DefPath, DefPathData};
|
||||
use rustc::hir;
|
||||
use rustc::hir::intravisit::IdRange;
|
||||
|
||||
|
@ -567,7 +566,7 @@ impl<'a, 'tcx> CrateMetadata {
|
|||
ty::TraitDef::new(self.local_def_id(item_id),
|
||||
data.unsafety,
|
||||
data.paren_sugar,
|
||||
self.def_path(item_id).unwrap().deterministic_hash(tcx))
|
||||
self.def_path(item_id).deterministic_hash(tcx))
|
||||
}
|
||||
|
||||
fn get_variant(&self,
|
||||
|
@ -1128,16 +1127,10 @@ impl<'a, 'tcx> CrateMetadata {
|
|||
self.def_path_table.def_key(index)
|
||||
}
|
||||
|
||||
// Returns the path leading to the thing with this `id`. Note that
|
||||
// some def-ids don't wind up in the metadata, so `def_path` sometimes
|
||||
// returns `None`
|
||||
pub fn def_path(&self, id: DefIndex) -> Option<hir_map::DefPath> {
|
||||
// Returns the path leading to the thing with this `id`.
|
||||
pub fn def_path(&self, id: DefIndex) -> DefPath {
|
||||
debug!("def_path(id={:?})", id);
|
||||
if self.is_proc_macro(id) || self.maybe_entry(id).is_some() {
|
||||
Some(hir_map::DefPath::make(self.cnum, id, |parent| self.def_key(parent)))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
DefPath::make(self.cnum, id, |parent| self.def_path_table.def_key(parent))
|
||||
}
|
||||
|
||||
/// Imports the codemap from an external crate into the codemap of the crate
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue