Skip to content

Commit 4835698

Browse files
committed
On-demandify extern_crate
1 parent b0f05d4 commit 4835698

File tree

5 files changed

+15
-13
lines changed

5 files changed

+15
-13
lines changed

src/librustc/middle/cstore.rs

-2
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,6 @@ pub trait CrateStore {
254254
fn is_compiler_builtins(&self, cnum: CrateNum) -> bool;
255255
fn is_sanitizer_runtime(&self, cnum: CrateNum) -> bool;
256256
fn panic_strategy(&self, cnum: CrateNum) -> PanicStrategy;
257-
fn extern_crate(&self, cnum: CrateNum) -> Option<ExternCrate>;
258257
/// The name of the crate as it is referred to in source code of the current
259258
/// crate.
260259
fn crate_name(&self, cnum: CrateNum) -> Symbol;
@@ -374,7 +373,6 @@ impl CrateStore for DummyCrateStore {
374373
fn panic_strategy(&self, cnum: CrateNum) -> PanicStrategy {
375374
bug!("panic_strategy")
376375
}
377-
fn extern_crate(&self, cnum: CrateNum) -> Option<ExternCrate> { bug!("extern_crate") }
378376
fn crate_name(&self, cnum: CrateNum) -> Symbol { bug!("crate_name") }
379377
fn original_crate_name(&self, cnum: CrateNum) -> Symbol {
380378
bug!("original_crate_name")

src/librustc/ty/item_path.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
100100
//
101101
// Returns `None` for the local crate.
102102
if cnum != LOCAL_CRATE {
103-
let opt_extern_crate = self.sess.cstore.extern_crate(cnum);
103+
let opt_extern_crate = self.extern_crate(cnum);
104104
let opt_extern_crate = opt_extern_crate.and_then(|extern_crate| {
105105
if extern_crate.direct {
106106
Some(extern_crate.def_id)
@@ -136,8 +136,8 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
136136
// If `cur_def` is a direct or injected extern crate, push the path to the crate
137137
// followed by the path to the item within the crate and return.
138138
if cur_def.index == CRATE_DEF_INDEX {
139-
match self.sess.cstore.extern_crate(cur_def.krate) {
140-
Some(extern_crate) if extern_crate.direct => {
139+
match *self.extern_crate(cur_def.krate) {
140+
Some(ref extern_crate) if extern_crate.direct => {
141141
self.push_item_path(buffer, extern_crate.def_id);
142142
cur_path.iter().rev().map(|segment| buffer.push(&segment.as_str())).count();
143143
return true;

src/librustc/ty/maps.rs

+9-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use hir::def_id::{CrateNum, CRATE_DEF_INDEX, DefId, LOCAL_CRATE};
1313
use hir::def::Def;
1414
use hir;
1515
use middle::const_val;
16-
use middle::cstore::LinkagePreference;
16+
use middle::cstore::{ExternCrate, LinkagePreference};
1717
use middle::privacy::AccessLevels;
1818
use middle::region::RegionMaps;
1919
use mir;
@@ -501,6 +501,12 @@ impl<'tcx> QueryDescription for queries::is_panic_runtime<'tcx> {
501501
}
502502
}
503503

504+
impl<'tcx> QueryDescription for queries::extern_crate<'tcx> {
505+
fn describe(_: TyCtxt, _: CrateNum) -> String {
506+
"getting crate's ExternCrateData".to_string()
507+
}
508+
}
509+
504510
macro_rules! define_maps {
505511
(<$tcx:tt>
506512
$($(#[$attr:meta])*
@@ -963,6 +969,8 @@ define_maps! { <'tcx>
963969

964970
[] is_allocator: MetaDataByCrateNum(CrateNum) -> bool,
965971
[] is_panic_runtime: MetaDataByCrateNum(CrateNum) -> bool,
972+
973+
[] extern_crate: MetaDataByCrateNum(CrateNum) -> Rc<Option<ExternCrate>>,
966974
}
967975

968976
fn type_param_predicates((item_id, param_id): (DefId, DefId)) -> DepConstructor {

src/librustc_metadata/cstore_impl.rs

+2-6
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use schema;
1414

1515
use rustc::dep_graph::DepTrackingMapConfig;
1616
use rustc::middle::cstore::{CrateStore, CrateSource, LibSource, DepKind,
17-
ExternCrate, NativeLibrary, MetadataLoader, LinkMeta,
17+
NativeLibrary, MetadataLoader, LinkMeta,
1818
LinkagePreference, LoadedMacro, EncodedMetadata};
1919
use rustc::hir::def;
2020
use rustc::middle::lang_items;
@@ -156,6 +156,7 @@ provide! { <'tcx> tcx, def_id, cdata, cnum,
156156
dylib_dependency_formats => { Rc::new(cdata.get_dylib_dependency_formats(&tcx.dep_graph)) }
157157
is_allocator => { cdata.is_allocator(&tcx.dep_graph) }
158158
is_panic_runtime => { cdata.is_panic_runtime(&tcx.dep_graph) }
159+
extern_crate => { Rc::new(cdata.extern_crate.get()) }
159160
}
160161
}
161162

@@ -283,11 +284,6 @@ impl CrateStore for cstore::CStore {
283284
self.get_crate_data(cnum).name()
284285
}
285286

286-
fn extern_crate(&self, cnum: CrateNum) -> Option<ExternCrate>
287-
{
288-
self.get_crate_data(cnum).extern_crate.get()
289-
}
290-
291287
fn crate_hash(&self, cnum: CrateNum) -> Svh
292288
{
293289
self.get_crate_hash(cnum)

src/librustc_save_analysis/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ impl<'l, 'tcx: 'l> SaveContext<'l, 'tcx> {
107107
let mut result = Vec::new();
108108

109109
for n in self.tcx.sess.cstore.crates() {
110-
let span = match self.tcx.sess.cstore.extern_crate(n) {
110+
let span = match *self.tcx.extern_crate(n) {
111111
Some(ref c) => c.span,
112112
None => {
113113
debug!("Skipping crate {}, no data", n);

0 commit comments

Comments
 (0)