Rollup merge of #80646 - bugadani:meta, r=petrochenkov
Clean up in `each_child_of_item` This PR hopes to eliminate some of the surprising elements I encountered while reading the function. - `macros_only` is checked against inside the loop body, but if it is `true`, the loop is skipped anyway - only query `span` when relevant - no need to allocate attribute vector
This commit is contained in:
commit
539c435b50
@ -1055,19 +1055,15 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
|
||||
|
||||
// Iterate over all children.
|
||||
let macros_only = self.dep_kind.lock().macros_only();
|
||||
if !macros_only {
|
||||
let children = self.root.tables.children.get(self, id).unwrap_or_else(Lazy::empty);
|
||||
for child_index in children.decode((self, sess)) {
|
||||
if macros_only {
|
||||
continue;
|
||||
}
|
||||
|
||||
for child_index in children.decode((self, sess)) {
|
||||
// Get the item.
|
||||
if let Some(child_kind) = self.maybe_kind(child_index) {
|
||||
match child_kind {
|
||||
EntryKind::MacroDef(..) => {}
|
||||
_ if macros_only => continue,
|
||||
_ => {}
|
||||
}
|
||||
let child_kind = match self.maybe_kind(child_index) {
|
||||
Some(child_kind) => child_kind,
|
||||
None => continue,
|
||||
};
|
||||
|
||||
// Hand off the item to the callback.
|
||||
match child_kind {
|
||||
@ -1102,8 +1098,8 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
|
||||
}
|
||||
|
||||
let def_key = self.def_key(child_index);
|
||||
let span = self.get_span(child_index, sess);
|
||||
if def_key.disambiguated_data.data.get_opt_name().is_some() {
|
||||
let span = self.get_span(child_index, sess);
|
||||
let kind = self.def_kind(child_index);
|
||||
let ident = self.item_ident(child_index, sess);
|
||||
let vis = self.get_visibility(child_index);
|
||||
@ -1137,9 +1133,8 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
|
||||
// within the crate. We only need this for fictive constructors,
|
||||
// for other constructors correct visibilities
|
||||
// were already encoded in metadata.
|
||||
let attrs: Vec<_> =
|
||||
self.get_item_attrs(def_id.index, sess).collect();
|
||||
if sess.contains_name(&attrs, sym::non_exhaustive) {
|
||||
let mut attrs = self.get_item_attrs(def_id.index, sess);
|
||||
if attrs.any(|item| item.has_name(sym::non_exhaustive)) {
|
||||
let crate_def_id = self.local_def_id(CRATE_DEF_INDEX);
|
||||
vis = ty::Visibility::Restricted(crate_def_id);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user