diff options
| author | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2017-11-29 11:20:49 -0800 |
|---|---|---|
| committer | Jeffrey Seyfried <jeffrey.seyfried@gmail.com> | 2017-12-05 17:23:01 -0800 |
| commit | 58e80400b24c09624ee602746c80d25aa18e0c86 (patch) | |
| tree | 3772eb1d7e0f314794119d9ac1614527afb57831 /src/librustc_metadata | |
| parent | 8503b3ff822c1ed01c89773d30e4e10b886d77a5 (diff) | |
| download | rust-58e80400b24c09624ee602746c80d25aa18e0c86.tar.gz rust-58e80400b24c09624ee602746c80d25aa18e0c86.zip | |
Include non-`pub` `use` and `extern crate` items in the crate metadata for macros 2.0.
Diffstat (limited to 'src/librustc_metadata')
| -rw-r--r-- | src/librustc_metadata/cstore_impl.rs | 6 | ||||
| -rw-r--r-- | src/librustc_metadata/decoder.rs | 17 | ||||
| -rw-r--r-- | src/librustc_metadata/encoder.rs | 4 |
3 files changed, 17 insertions, 10 deletions
diff --git a/src/librustc_metadata/cstore_impl.rs b/src/librustc_metadata/cstore_impl.rs index 911b4dac4e1..bcf749da8cd 100644 --- a/src/librustc_metadata/cstore_impl.rs +++ b/src/librustc_metadata/cstore_impl.rs @@ -305,12 +305,12 @@ pub fn provide<'tcx>(providers: &mut Providers<'tcx>) { let mut add_child = |bfs_queue: &mut VecDeque<_>, child: &def::Export, parent: DefId| { - let child = child.def.def_id(); - - if tcx.visibility(child) != ty::Visibility::Public { + if child.vis != ty::Visibility::Public { return; } + let child = child.def.def_id(); + match visible_parent_map.entry(child) { Entry::Occupied(mut entry) => { // If `child` is defined in crate `cnum`, ensure diff --git a/src/librustc_metadata/decoder.rs b/src/librustc_metadata/decoder.rs index eb2bcfc93c5..e2ad5fbf22b 100644 --- a/src/librustc_metadata/decoder.rs +++ b/src/librustc_metadata/decoder.rs @@ -631,7 +631,12 @@ impl<'a, 'tcx> CrateMetadata { ext.kind() ); let ident = Ident::with_empty_ctxt(name); - callback(def::Export { ident: ident, def: def, span: DUMMY_SP }); + callback(def::Export { + ident: ident, + def: def, + vis: ty::Visibility::Public, + span: DUMMY_SP, + }); } } return @@ -668,6 +673,7 @@ impl<'a, 'tcx> CrateMetadata { callback(def::Export { def, ident: Ident::from_str(&self.item_name(child_index)), + vis: self.get_visibility(child_index), span: self.entry(child_index).span.decode((self, sess)), }); } @@ -685,7 +691,8 @@ impl<'a, 'tcx> CrateMetadata { if let (Some(def), Some(name)) = (self.get_def(child_index), def_key.disambiguated_data.data.get_opt_name()) { let ident = Ident::from_str(&name); - callback(def::Export { def: def, ident: ident, span: span }); + let vis = self.get_visibility(child_index); + callback(def::Export { def, ident, vis, span }); // For non-reexport structs and variants add their constructors to children. // Reexport lists automatically contain constructors when necessary. match def { @@ -693,7 +700,8 @@ impl<'a, 'tcx> CrateMetadata { if let Some(ctor_def_id) = self.get_struct_ctor_def_id(child_index) { let ctor_kind = self.get_ctor_kind(child_index); let ctor_def = Def::StructCtor(ctor_def_id, ctor_kind); - callback(def::Export { def: ctor_def, ident: ident, span: span }); + let vis = self.get_visibility(ctor_def_id.index); + callback(def::Export { def: ctor_def, ident, vis, span }); } } Def::Variant(def_id) => { @@ -701,7 +709,8 @@ impl<'a, 'tcx> CrateMetadata { // value namespace, they are reserved for possible future use. let ctor_kind = self.get_ctor_kind(child_index); let ctor_def = Def::VariantCtor(def_id, ctor_kind); - callback(def::Export { def: ctor_def, ident: ident, span: span }); + let vis = self.get_visibility(child_index); + callback(def::Export { def: ctor_def, ident, vis, span }); } _ => {} } diff --git a/src/librustc_metadata/encoder.rs b/src/librustc_metadata/encoder.rs index 6cfa324797c..7de3b8a4264 100644 --- a/src/librustc_metadata/encoder.rs +++ b/src/librustc_metadata/encoder.rs @@ -506,9 +506,7 @@ impl<'a, 'b: 'a, 'tcx: 'b> IsolatedEncoder<'a, 'b, 'tcx> { let data = ModData { reexports: match tcx.module_exports(def_id) { - Some(ref exports) if *vis == hir::Public => { - self.lazy_seq_from_slice(exports.as_slice()) - } + Some(ref exports) => self.lazy_seq_from_slice(exports.as_slice()), _ => LazySeq::empty(), }, }; |
