pull out call to record for impl items

This commit is contained in:
Niko Matsakis 2016-08-14 18:27:57 -04:00
parent 9afcd77246
commit 8dc8151b49

View File

@ -530,7 +530,31 @@ impl<'a, 'tcx, 'encoder> ItemContentBuilder<'a, 'tcx, 'encoder> {
}
}
impl<'a, 'tcx, 'encoder> IndexBuilder<'a, 'tcx, 'encoder> {
impl<'a, 'tcx, 'encoder> ItemContentBuilder<'a, 'tcx, 'encoder> {
fn encode_info_for_impl_item(&mut self,
impl_id: NodeId,
impl_item_def_id: DefId,
ast_item: Option<&hir::ImplItem>) {
match self.ecx.tcx.impl_or_trait_item(impl_item_def_id) {
ty::ConstTraitItem(ref associated_const) => {
self.encode_info_for_associated_const(&associated_const,
impl_id,
ast_item)
}
ty::MethodTraitItem(ref method_type) => {
self.encode_info_for_method(&method_type,
false,
impl_id,
ast_item)
}
ty::TypeTraitItem(ref associated_type) => {
self.encode_info_for_associated_type(&associated_type,
impl_id,
ast_item)
}
}
}
fn encode_info_for_associated_const(&mut self,
associated_const: &ty::AssociatedConst,
parent_id: NodeId,
@ -540,32 +564,30 @@ impl<'a, 'tcx, 'encoder> IndexBuilder<'a, 'tcx, 'encoder> {
associated_const.def_id,
associated_const.name);
self.record(associated_const.def_id, |this| {
encode_def_id_and_key(ecx, this.rbml_w, associated_const.def_id);
encode_name(this.rbml_w, associated_const.name);
this.encode_visibility(associated_const.vis);
encode_family(this.rbml_w, 'C');
encode_def_id_and_key(ecx, self.rbml_w, associated_const.def_id);
encode_name(self.rbml_w, associated_const.name);
self.encode_visibility(associated_const.vis);
encode_family(self.rbml_w, 'C');
this.encode_parent_item(ecx.tcx.map.local_def_id(parent_id));
encode_item_sort(this.rbml_w, 'C');
self.encode_parent_item(ecx.tcx.map.local_def_id(parent_id));
encode_item_sort(self.rbml_w, 'C');
this.encode_bounds_and_type_for_item(ecx.local_id(associated_const.def_id));
self.encode_bounds_and_type_for_item(ecx.local_id(associated_const.def_id));
let stab = ecx.tcx.lookup_stability(associated_const.def_id);
let depr = ecx.tcx.lookup_deprecation(associated_const.def_id);
encode_stability(this.rbml_w, stab);
encode_deprecation(this.rbml_w, depr);
let stab = ecx.tcx.lookup_stability(associated_const.def_id);
let depr = ecx.tcx.lookup_deprecation(associated_const.def_id);
encode_stability(self.rbml_w, stab);
encode_deprecation(self.rbml_w, depr);
if let Some(ii) = impl_item_opt {
encode_attributes(this.rbml_w, &ii.attrs);
encode_defaultness(this.rbml_w, ii.defaultness);
encode_inlined_item(ecx,
this.rbml_w,
InlinedItemRef::ImplItem(ecx.tcx.map.local_def_id(parent_id),
ii));
this.encode_mir(ii.id);
}
});
if let Some(ii) = impl_item_opt {
encode_attributes(self.rbml_w, &ii.attrs);
encode_defaultness(self.rbml_w, ii.defaultness);
encode_inlined_item(ecx,
self.rbml_w,
InlinedItemRef::ImplItem(ecx.tcx.map.local_def_id(parent_id),
ii));
self.encode_mir(ii.id);
}
}
fn encode_info_for_method(&mut self,
@ -577,40 +599,38 @@ impl<'a, 'tcx, 'encoder> IndexBuilder<'a, 'tcx, 'encoder> {
debug!("encode_info_for_method: {:?} {:?}", m.def_id,
m.name);
self.record(m.def_id, |this| {
this.encode_method_ty_fields(m);
this.encode_parent_item(ecx.tcx.map.local_def_id(parent_id));
encode_item_sort(this.rbml_w, 'r');
self.encode_method_ty_fields(m);
self.encode_parent_item(ecx.tcx.map.local_def_id(parent_id));
encode_item_sort(self.rbml_w, 'r');
let stab = ecx.tcx.lookup_stability(m.def_id);
let depr = ecx.tcx.lookup_deprecation(m.def_id);
encode_stability(this.rbml_w, stab);
encode_deprecation(this.rbml_w, depr);
let stab = ecx.tcx.lookup_stability(m.def_id);
let depr = ecx.tcx.lookup_deprecation(m.def_id);
encode_stability(self.rbml_w, stab);
encode_deprecation(self.rbml_w, depr);
let m_node_id = ecx.local_id(m.def_id);
this.encode_bounds_and_type_for_item(m_node_id);
let m_node_id = ecx.local_id(m.def_id);
self.encode_bounds_and_type_for_item(m_node_id);
if let Some(impl_item) = impl_item_opt {
if let hir::ImplItemKind::Method(ref sig, _) = impl_item.node {
encode_attributes(this.rbml_w, &impl_item.attrs);
let generics = ecx.tcx.lookup_generics(m.def_id);
let types = generics.parent_types as usize + generics.types.len();
let needs_inline = types > 0 || is_default_impl ||
attr::requests_inline(&impl_item.attrs);
if needs_inline || sig.constness == hir::Constness::Const {
encode_inlined_item(
ecx,
this.rbml_w,
InlinedItemRef::ImplItem(ecx.tcx.map.local_def_id(parent_id),
impl_item));
this.encode_mir(impl_item.id);
}
encode_constness(this.rbml_w, sig.constness);
encode_defaultness(this.rbml_w, impl_item.defaultness);
this.encode_method_argument_names(&sig.decl);
if let Some(impl_item) = impl_item_opt {
if let hir::ImplItemKind::Method(ref sig, _) = impl_item.node {
encode_attributes(self.rbml_w, &impl_item.attrs);
let generics = ecx.tcx.lookup_generics(m.def_id);
let types = generics.parent_types as usize + generics.types.len();
let needs_inline = types > 0 || is_default_impl ||
attr::requests_inline(&impl_item.attrs);
if needs_inline || sig.constness == hir::Constness::Const {
encode_inlined_item(
ecx,
self.rbml_w,
InlinedItemRef::ImplItem(ecx.tcx.map.local_def_id(parent_id),
impl_item));
self.encode_mir(impl_item.id);
}
encode_constness(self.rbml_w, sig.constness);
encode_defaultness(self.rbml_w, impl_item.defaultness);
self.encode_method_argument_names(&sig.decl);
}
});
}
}
fn encode_info_for_associated_type(&mut self,
@ -622,32 +642,30 @@ impl<'a, 'tcx, 'encoder> IndexBuilder<'a, 'tcx, 'encoder> {
associated_type.def_id,
associated_type.name);
self.record(associated_type.def_id, |this| {
encode_def_id_and_key(ecx, this.rbml_w, associated_type.def_id);
encode_name(this.rbml_w, associated_type.name);
this.encode_visibility(associated_type.vis);
encode_family(this.rbml_w, 'y');
this.encode_parent_item(ecx.tcx.map.local_def_id(parent_id));
encode_item_sort(this.rbml_w, 't');
encode_def_id_and_key(ecx, self.rbml_w, associated_type.def_id);
encode_name(self.rbml_w, associated_type.name);
self.encode_visibility(associated_type.vis);
encode_family(self.rbml_w, 'y');
self.encode_parent_item(ecx.tcx.map.local_def_id(parent_id));
encode_item_sort(self.rbml_w, 't');
let stab = ecx.tcx.lookup_stability(associated_type.def_id);
let depr = ecx.tcx.lookup_deprecation(associated_type.def_id);
encode_stability(this.rbml_w, stab);
encode_deprecation(this.rbml_w, depr);
let stab = ecx.tcx.lookup_stability(associated_type.def_id);
let depr = ecx.tcx.lookup_deprecation(associated_type.def_id);
encode_stability(self.rbml_w, stab);
encode_deprecation(self.rbml_w, depr);
if let Some(ii) = impl_item_opt {
encode_attributes(this.rbml_w, &ii.attrs);
encode_defaultness(this.rbml_w, ii.defaultness);
} else {
// TODO this looks bogus and unnecessary
this.encode_predicates(&ecx.tcx.lookup_predicates(associated_type.def_id),
tag_item_generics);
}
if let Some(ii) = impl_item_opt {
encode_attributes(self.rbml_w, &ii.attrs);
encode_defaultness(self.rbml_w, ii.defaultness);
} else {
// TODO this looks bogus and unnecessary
self.encode_predicates(&ecx.tcx.lookup_predicates(associated_type.def_id),
tag_item_generics);
}
if let Some(ty) = associated_type.ty {
this.encode_type(ty);
}
});
if let Some(ty) = associated_type.ty {
self.encode_type(ty);
}
}
}
@ -1116,24 +1134,10 @@ impl<'a, 'tcx, 'encoder> IndexBuilder<'a, 'tcx, 'encoder> {
None
};
match self.ecx.tcx.impl_or_trait_item(trait_item_def_id.def_id()) {
ty::ConstTraitItem(ref associated_const) => {
self.encode_info_for_associated_const(&associated_const,
impl_id,
ast_item)
}
ty::MethodTraitItem(ref method_type) => {
self.encode_info_for_method(&method_type,
false,
impl_id,
ast_item)
}
ty::TypeTraitItem(ref associated_type) => {
self.encode_info_for_associated_type(&associated_type,
impl_id,
ast_item)
}
}
let trait_item_def_id = trait_item_def_id.def_id();
self.record(trait_item_def_id, |this| {
this.encode_info_for_impl_item(impl_id, trait_item_def_id, ast_item)
});
}
}