Skip to content

Commit 72f95aa

Browse files
Move retrace_path() implementation to DefPathTable
1 parent ea733b5 commit 72f95aa

File tree

4 files changed

+65
-63
lines changed

4 files changed

+65
-63
lines changed

src/librustc/hir/map/definitions.rs

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
//! There are also some rather random cases (like const initializer
1616
//! expressions) that are mostly just leftovers.
1717
18-
19-
2018
use hir::def_id::{CrateNum, DefId, DefIndex, LOCAL_CRATE};
2119
use rustc_data_structures::fx::FxHashMap;
2220
use rustc_data_structures::stable_hasher::StableHasher;
@@ -57,6 +55,37 @@ impl DefPathTable {
5755
pub fn contains_key(&self, key: &DefKey) -> bool {
5856
self.key_to_index.contains_key(key)
5957
}
58+
59+
pub fn retrace_path(&self,
60+
path_data: &[DisambiguatedDefPathData])
61+
-> Option<DefIndex> {
62+
let root_key = DefKey {
63+
parent: None,
64+
disambiguated_data: DisambiguatedDefPathData {
65+
data: DefPathData::CrateRoot,
66+
disambiguator: 0,
67+
},
68+
};
69+
70+
let root_index = self.key_to_index
71+
.get(&root_key)
72+
.expect("no root key?")
73+
.clone();
74+
75+
debug!("retrace_path: root_index={:?}", root_index);
76+
77+
let mut index = root_index;
78+
for data in path_data {
79+
let key = DefKey { parent: Some(index), disambiguated_data: data.clone() };
80+
debug!("retrace_path: key={:?}", key);
81+
match self.key_to_index.get(&key) {
82+
Some(&i) => index = i,
83+
None => return None,
84+
}
85+
}
86+
87+
Some(index)
88+
}
6089
}
6190

6291

src/librustc/middle/cstore.rs

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
use hir::def::{self, Def};
2626
use hir::def_id::{CrateNum, DefId, DefIndex};
2727
use hir::map as hir_map;
28-
use hir::map::definitions::{Definitions, DefKey};
28+
use hir::map::definitions::{Definitions, DefKey, DisambiguatedDefPathData};
2929
use hir::svh::Svh;
3030
use middle::lang_items;
3131
use ty::{self, Ty, TyCtxt};
@@ -336,11 +336,11 @@ pub trait CrateStore<'tcx> {
336336
fn is_no_builtins(&self, cnum: CrateNum) -> bool;
337337

338338
// resolve
339-
fn def_index_for_def_key(&self,
340-
cnum: CrateNum,
341-
def: DefKey)
342-
-> Option<DefIndex>;
343-
fn def_key(&self, def: DefId) -> hir_map::DefKey;
339+
fn retrace_path(&self,
340+
cnum: CrateNum,
341+
path_data: &[DisambiguatedDefPathData])
342+
-> Option<DefId>;
343+
fn def_key(&self, def: DefId) -> DefKey;
344344
fn relative_def_path(&self, def: DefId) -> Option<hir_map::DefPath>;
345345
fn struct_field_names(&self, def: DefId) -> Vec<ast::Name>;
346346
fn item_children(&self, did: DefId) -> Vec<def::Export>;
@@ -442,12 +442,6 @@ impl<'tcx> CrateStore<'tcx> for DummyCrateStore {
442442

443443
// trait info
444444
fn implementations_of_trait(&self, filter: Option<DefId>) -> Vec<DefId> { vec![] }
445-
fn def_index_for_def_key(&self,
446-
cnum: CrateNum,
447-
def: DefKey)
448-
-> Option<DefIndex> {
449-
None
450-
}
451445

452446
// impl info
453447
fn associated_item_def_ids(&self, def_id: DefId) -> Vec<DefId>
@@ -508,7 +502,14 @@ impl<'tcx> CrateStore<'tcx> for DummyCrateStore {
508502
fn is_no_builtins(&self, cnum: CrateNum) -> bool { bug!("is_no_builtins") }
509503

510504
// resolve
511-
fn def_key(&self, def: DefId) -> hir_map::DefKey { bug!("def_key") }
505+
fn retrace_path(&self,
506+
cnum: CrateNum,
507+
path_data: &[DisambiguatedDefPathData])
508+
-> Option<DefId> {
509+
None
510+
}
511+
512+
fn def_key(&self, def: DefId) -> DefKey { bug!("def_key") }
512513
fn relative_def_path(&self, def: DefId) -> Option<hir_map::DefPath> {
513514
bug!("relative_def_path")
514515
}

src/librustc/ty/context.rs

Lines changed: 10 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ use session::Session;
1515
use middle;
1616
use hir::TraitMap;
1717
use hir::def::Def;
18-
use hir::def_id::{CrateNum, DefId, DefIndex, LOCAL_CRATE};
18+
use hir::def_id::{CrateNum, DefId, LOCAL_CRATE};
1919
use hir::map as ast_map;
20-
use hir::map::{DefKey, DefPathData, DisambiguatedDefPathData};
20+
use hir::map::DisambiguatedDefPathData;
2121
use middle::free_region::FreeRegionMap;
2222
use middle::region::RegionMaps;
2323
use middle::resolve_lifetime;
@@ -627,50 +627,21 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
627627
}
628628
}
629629

630-
/// Given a def-key `key` and a crate `krate`, finds the def-index
631-
/// that `krate` assigned to `key`. This `DefIndex` will always be
632-
/// relative to `krate`.
633-
///
634-
/// Returns `None` if there is no `DefIndex` with that key.
635-
pub fn def_index_for_def_key(self, krate: CrateNum, key: DefKey)
636-
-> Option<DefIndex> {
637-
if krate == LOCAL_CRATE {
638-
self.map.def_index_for_def_key(key)
639-
} else {
640-
self.sess.cstore.def_index_for_def_key(krate, key)
641-
}
642-
}
643-
644630
pub fn retrace_path(self,
645631
krate: CrateNum,
646632
path_data: &[DisambiguatedDefPathData])
647633
-> Option<DefId> {
648634
debug!("retrace_path(path={:?}, krate={:?})", path_data, self.crate_name(krate));
649635

650-
let root_key = DefKey {
651-
parent: None,
652-
disambiguated_data: DisambiguatedDefPathData {
653-
data: DefPathData::CrateRoot,
654-
disambiguator: 0,
655-
},
656-
};
657-
658-
let root_index = self.def_index_for_def_key(krate, root_key)
659-
.expect("no root key?");
660-
661-
debug!("retrace_path: root_index={:?}", root_index);
662-
663-
let mut index = root_index;
664-
for data in path_data {
665-
let key = DefKey { parent: Some(index), disambiguated_data: data.clone() };
666-
debug!("retrace_path: key={:?}", key);
667-
match self.def_index_for_def_key(krate, key) {
668-
Some(i) => index = i,
669-
None => return None,
670-
}
636+
if krate == LOCAL_CRATE {
637+
self.map
638+
.definitions()
639+
.def_path_table()
640+
.retrace_path(path_data)
641+
.map(|def_index| DefId { krate: krate, index: def_index })
642+
} else {
643+
self.sess.cstore.retrace_path(krate, path_data)
671644
}
672-
673-
Some(DefId { krate: krate, index: index })
674645
}
675646

676647
pub fn type_parameter_def(self,

src/librustc_metadata/cstore_impl.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ use rustc::ty::{self, Ty, TyCtxt};
2222
use rustc::hir::def_id::{CrateNum, DefId, DefIndex, CRATE_DEF_INDEX, LOCAL_CRATE};
2323

2424
use rustc::dep_graph::DepNode;
25-
use rustc::hir::map as hir_map;
26-
use rustc::hir::map::DefKey;
25+
use rustc::hir::map::{DefKey, DefPath, DisambiguatedDefPathData};
2726
use rustc::mir::Mir;
2827
use rustc::util::nodemap::{NodeSet, DefIdMap};
2928
use rustc_back::PanicStrategy;
@@ -336,18 +335,20 @@ impl<'tcx> CrateStore<'tcx> for cstore::CStore {
336335
self.get_crate_data(cnum).is_no_builtins()
337336
}
338337

339-
fn def_index_for_def_key(&self,
340-
cnum: CrateNum,
341-
def: DefKey)
342-
-> Option<DefIndex> {
338+
fn retrace_path(&self,
339+
cnum: CrateNum,
340+
path: &[DisambiguatedDefPathData])
341+
-> Option<DefId> {
343342
let cdata = self.get_crate_data(cnum);
344-
cdata.def_path_table.def_index_for_def_key(&def)
343+
cdata.def_path_table
344+
.retrace_path(&path)
345+
.map(|index| DefId { krate: cnum, index: index })
345346
}
346347

347348
/// Returns the `DefKey` for a given `DefId`. This indicates the
348349
/// parent `DefId` as well as some idea of what kind of data the
349350
/// `DefId` refers to.
350-
fn def_key(&self, def: DefId) -> hir_map::DefKey {
351+
fn def_key(&self, def: DefId) -> DefKey {
351352
// Note: loading the def-key (or def-path) for a def-id is not
352353
// a *read* of its metadata. This is because the def-id is
353354
// really just an interned shorthand for a def-path, which is the
@@ -357,7 +358,7 @@ impl<'tcx> CrateStore<'tcx> for cstore::CStore {
357358
self.get_crate_data(def.krate).def_key(def.index)
358359
}
359360

360-
fn relative_def_path(&self, def: DefId) -> Option<hir_map::DefPath> {
361+
fn relative_def_path(&self, def: DefId) -> Option<DefPath> {
361362
// See `Note` above in `def_key()` for why this read is
362363
// commented out:
363364
//

0 commit comments

Comments
 (0)