Make hir::Visibility non-copyable and add ty::Visibility
This commit is contained in:
parent
ffbbf24186
commit
bb66d91c98
21 changed files with 200 additions and 165 deletions
|
|
@ -48,7 +48,7 @@ impl<'tcx> CrateStore<'tcx> for cstore::CStore {
|
|||
decoder::get_deprecation(&cdata, def.index)
|
||||
}
|
||||
|
||||
fn visibility(&self, def: DefId) -> hir::Visibility {
|
||||
fn visibility(&self, def: DefId) -> ty::Visibility {
|
||||
let cdata = self.get_crate_data(def.krate);
|
||||
decoder::get_visibility(&cdata, def.index)
|
||||
}
|
||||
|
|
@ -536,7 +536,6 @@ impl<'tcx> CrateStore<'tcx> for cstore::CStore {
|
|||
let mut visible_parent_map = self.visible_parent_map.borrow_mut();
|
||||
if !visible_parent_map.is_empty() { return visible_parent_map; }
|
||||
|
||||
use rustc::hir;
|
||||
use rustc::middle::cstore::{CrateStore, ChildItem};
|
||||
use std::collections::vec_deque::VecDeque;
|
||||
use std::collections::hash_map::Entry;
|
||||
|
|
@ -552,7 +551,7 @@ impl<'tcx> CrateStore<'tcx> for cstore::CStore {
|
|||
let mut bfs_queue = &mut VecDeque::new();
|
||||
let mut add_child = |bfs_queue: &mut VecDeque<_>, child: ChildItem, parent: DefId| {
|
||||
let child = match child.def {
|
||||
DefLike::DlDef(def) if child.vis == hir::Public => def.def_id(),
|
||||
DefLike::DlDef(def) if child.vis == ty::Visibility::Public => def.def_id(),
|
||||
_ => return,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -140,13 +140,13 @@ fn item_family(item: rbml::Doc) -> Family {
|
|||
}
|
||||
}
|
||||
|
||||
fn item_visibility(item: rbml::Doc) -> hir::Visibility {
|
||||
fn item_visibility(item: rbml::Doc) -> ty::Visibility {
|
||||
match reader::maybe_get_doc(item, tag_items_data_item_visibility) {
|
||||
None => hir::Public,
|
||||
None => ty::Visibility::Public,
|
||||
Some(visibility_doc) => {
|
||||
match reader::doc_as_u8(visibility_doc) as char {
|
||||
'y' => hir::Public,
|
||||
'i' => hir::Inherited,
|
||||
'y' => ty::Visibility::Public,
|
||||
'i' => ty::Visibility::PrivateExternal,
|
||||
_ => bug!("unknown visibility character")
|
||||
}
|
||||
}
|
||||
|
|
@ -541,7 +541,7 @@ pub fn get_deprecation(cdata: Cmd, id: DefIndex) -> Option<attr::Deprecation> {
|
|||
})
|
||||
}
|
||||
|
||||
pub fn get_visibility(cdata: Cmd, id: DefIndex) -> hir::Visibility {
|
||||
pub fn get_visibility(cdata: Cmd, id: DefIndex) -> ty::Visibility {
|
||||
item_visibility(cdata.lookup_item(id))
|
||||
}
|
||||
|
||||
|
|
@ -639,7 +639,7 @@ fn each_child_of_item_or_crate<F, G>(intr: Rc<IdentInterner>,
|
|||
item_doc: rbml::Doc,
|
||||
mut get_crate_data: G,
|
||||
mut callback: F) where
|
||||
F: FnMut(DefLike, ast::Name, hir::Visibility),
|
||||
F: FnMut(DefLike, ast::Name, ty::Visibility),
|
||||
G: FnMut(ast::CrateNum) -> Rc<crate_metadata>,
|
||||
{
|
||||
// Iterate over all children.
|
||||
|
|
@ -723,7 +723,7 @@ fn each_child_of_item_or_crate<F, G>(intr: Rc<IdentInterner>,
|
|||
let def_like = item_to_def_like(crate_data, child_item_doc, child_def_id);
|
||||
// These items have a public visibility because they're part of
|
||||
// a public re-export.
|
||||
callback(def_like, token::intern(name), hir::Public);
|
||||
callback(def_like, token::intern(name), ty::Visibility::Public);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -734,7 +734,7 @@ pub fn each_child_of_item<F, G>(intr: Rc<IdentInterner>,
|
|||
id: DefIndex,
|
||||
get_crate_data: G,
|
||||
callback: F) where
|
||||
F: FnMut(DefLike, ast::Name, hir::Visibility),
|
||||
F: FnMut(DefLike, ast::Name, ty::Visibility),
|
||||
G: FnMut(ast::CrateNum) -> Rc<crate_metadata>,
|
||||
{
|
||||
// Find the item.
|
||||
|
|
@ -755,7 +755,7 @@ pub fn each_top_level_item_of_crate<F, G>(intr: Rc<IdentInterner>,
|
|||
cdata: Cmd,
|
||||
get_crate_data: G,
|
||||
callback: F) where
|
||||
F: FnMut(DefLike, ast::Name, hir::Visibility),
|
||||
F: FnMut(DefLike, ast::Name, ty::Visibility),
|
||||
G: FnMut(ast::CrateNum) -> Rc<crate_metadata>,
|
||||
{
|
||||
let root_doc = rbml::Doc::new(cdata.data());
|
||||
|
|
@ -1138,11 +1138,11 @@ pub fn get_struct_field_attrs(cdata: Cmd) -> FnvHashMap<DefId, Vec<ast::Attribut
|
|||
}).collect()
|
||||
}
|
||||
|
||||
fn struct_field_family_to_visibility(family: Family) -> hir::Visibility {
|
||||
fn struct_field_family_to_visibility(family: Family) -> ty::Visibility {
|
||||
match family {
|
||||
PublicField => hir::Public,
|
||||
InheritedField => hir::Inherited,
|
||||
_ => bug!()
|
||||
PublicField => ty::Visibility::Public,
|
||||
InheritedField => ty::Visibility::PrivateExternal,
|
||||
_ => bug!()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -249,7 +249,7 @@ fn encode_struct_fields(rbml_w: &mut Encoder,
|
|||
fn encode_enum_variant_info<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
|
||||
rbml_w: &mut Encoder,
|
||||
did: DefId,
|
||||
vis: hir::Visibility,
|
||||
vis: &hir::Visibility,
|
||||
index: &mut CrateIndex<'tcx>) {
|
||||
debug!("encode_enum_variant_info(did={:?})", did);
|
||||
let repr_hints = ecx.tcx.lookup_repr_hints(did);
|
||||
|
|
@ -355,7 +355,7 @@ fn encode_info_for_mod(ecx: &EncodeContext,
|
|||
attrs: &[ast::Attribute],
|
||||
id: NodeId,
|
||||
name: Name,
|
||||
vis: hir::Visibility) {
|
||||
vis: &hir::Visibility) {
|
||||
rbml_w.start_tag(tag_items_data_item);
|
||||
encode_def_id_and_key(ecx, rbml_w, ecx.tcx.map.local_def_id(id));
|
||||
encode_family(rbml_w, 'm');
|
||||
|
|
@ -383,7 +383,7 @@ fn encode_info_for_mod(ecx: &EncodeContext,
|
|||
encode_deprecation(rbml_w, depr);
|
||||
|
||||
// Encode the reexports of this module, if this module is public.
|
||||
if vis == hir::Public {
|
||||
if *vis == hir::Public {
|
||||
debug!("(encoding info for module) encoding reexports for {}", id);
|
||||
encode_reexports(ecx, rbml_w, id);
|
||||
}
|
||||
|
|
@ -393,21 +393,31 @@ fn encode_info_for_mod(ecx: &EncodeContext,
|
|||
}
|
||||
|
||||
fn encode_struct_field_family(rbml_w: &mut Encoder,
|
||||
visibility: hir::Visibility) {
|
||||
encode_family(rbml_w, match visibility {
|
||||
hir::Public => 'g',
|
||||
hir::Inherited => 'N'
|
||||
});
|
||||
visibility: ty::Visibility) {
|
||||
encode_family(rbml_w, if visibility.is_public() { 'g' } else { 'N' });
|
||||
}
|
||||
|
||||
fn encode_visibility(rbml_w: &mut Encoder, visibility: hir::Visibility) {
|
||||
let ch = match visibility {
|
||||
hir::Public => 'y',
|
||||
hir::Inherited => 'i',
|
||||
};
|
||||
fn encode_visibility<T: HasVisibility>(rbml_w: &mut Encoder, visibility: T) {
|
||||
let ch = if visibility.is_public() { 'y' } else { 'i' };
|
||||
rbml_w.wr_tagged_u8(tag_items_data_item_visibility, ch as u8);
|
||||
}
|
||||
|
||||
trait HasVisibility: Sized {
|
||||
fn is_public(self) -> bool;
|
||||
}
|
||||
|
||||
impl<'a> HasVisibility for &'a hir::Visibility {
|
||||
fn is_public(self) -> bool {
|
||||
*self == hir::Public
|
||||
}
|
||||
}
|
||||
|
||||
impl HasVisibility for ty::Visibility {
|
||||
fn is_public(self) -> bool {
|
||||
self == ty::Visibility::Public
|
||||
}
|
||||
}
|
||||
|
||||
fn encode_constness(rbml_w: &mut Encoder, constness: hir::Constness) {
|
||||
rbml_w.start_tag(tag_items_data_item_constness);
|
||||
let ch = match constness {
|
||||
|
|
@ -861,7 +871,7 @@ fn encode_info_for_item<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
|
|||
debug!("encoding info for item at {}",
|
||||
tcx.sess.codemap().span_to_string(item.span));
|
||||
|
||||
let vis = item.vis;
|
||||
let vis = &item.vis;
|
||||
let def_id = ecx.tcx.map.local_def_id(item.id);
|
||||
let stab = stability::lookup_stability(tcx, ecx.tcx.map.local_def_id(item.id));
|
||||
let depr = stability::lookup_deprecation(tcx, ecx.tcx.map.local_def_id(item.id));
|
||||
|
|
@ -932,7 +942,7 @@ fn encode_info_for_item<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
|
|||
&item.attrs,
|
||||
item.id,
|
||||
item.name,
|
||||
item.vis);
|
||||
&item.vis);
|
||||
}
|
||||
hir::ItemForeignMod(ref fm) => {
|
||||
index.record(def_id, rbml_w);
|
||||
|
|
@ -1336,7 +1346,7 @@ fn encode_info_for_foreign_item<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
|
|||
index.record(def_id, rbml_w);
|
||||
rbml_w.start_tag(tag_items_data_item);
|
||||
encode_def_id_and_key(ecx, rbml_w, def_id);
|
||||
encode_visibility(rbml_w, nitem.vis);
|
||||
encode_visibility(rbml_w, &nitem.vis);
|
||||
match nitem.node {
|
||||
hir::ForeignItemFn(ref fndecl, _) => {
|
||||
encode_family(rbml_w, FN_FAMILY);
|
||||
|
|
@ -1443,7 +1453,7 @@ fn encode_info_for_items<'a, 'tcx>(ecx: &EncodeContext<'a, 'tcx>,
|
|||
&[],
|
||||
CRATE_NODE_ID,
|
||||
syntax::parse::token::intern(&ecx.link_meta.crate_name),
|
||||
hir::Public);
|
||||
&hir::Public);
|
||||
|
||||
krate.visit_all_items(&mut EncodeVisitor {
|
||||
index: &mut index,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue