提交 aeb92bab 编写于 作者: E Eduard Burtescu

rustc: rename ty::populate_implementations_for_type_if_necessary to make it...

rustc: rename ty::populate_implementations_for_type_if_necessary to make it clear that it only populates inherent impls.
上级 8bcb3cb4
...@@ -313,13 +313,13 @@ pub fn each_impl<F>(cstore: &cstore::CStore, ...@@ -313,13 +313,13 @@ pub fn each_impl<F>(cstore: &cstore::CStore,
decoder::each_impl(&*cdata, callback) decoder::each_impl(&*cdata, callback)
} }
pub fn each_implementation_for_type<F>(cstore: &cstore::CStore, pub fn each_inherent_implementation_for_type<F>(cstore: &cstore::CStore,
def_id: ast::DefId, def_id: ast::DefId,
callback: F) where callback: F) where
F: FnMut(ast::DefId), F: FnMut(ast::DefId),
{ {
let cdata = cstore.get_crate_data(def_id.krate); let cdata = cstore.get_crate_data(def_id.krate);
decoder::each_implementation_for_type(&*cdata, def_id.node, callback) decoder::each_inherent_implementation_for_type(&*cdata, def_id.node, callback)
} }
pub fn each_implementation_for_trait<F>(cstore: &cstore::CStore, pub fn each_implementation_for_trait<F>(cstore: &cstore::CStore,
......
...@@ -1338,17 +1338,18 @@ pub fn each_impl<F>(cdata: Cmd, mut callback: F) where ...@@ -1338,17 +1338,18 @@ pub fn each_impl<F>(cdata: Cmd, mut callback: F) where
}); });
} }
pub fn each_implementation_for_type<F>(cdata: Cmd, pub fn each_inherent_implementation_for_type<F>(cdata: Cmd,
id: ast::NodeId, id: ast::NodeId,
mut callback: F) mut callback: F)
where F: FnMut(ast::DefId), where F: FnMut(ast::DefId),
{ {
let item_doc = lookup_item(id, cdata.data()); let item_doc = lookup_item(id, cdata.data());
reader::tagged_docs(item_doc, reader::tagged_docs(item_doc,
tag_items_data_item_inherent_impl, tag_items_data_item_inherent_impl,
|impl_doc| { |impl_doc| {
let implementation_def_id = item_def_id(impl_doc, cdata); if reader::maybe_get_doc(impl_doc, tag_item_trait_ref).is_none() {
callback(implementation_def_id); callback(item_def_id(impl_doc, cdata));
}
true true
}); });
} }
......
...@@ -6336,10 +6336,10 @@ pub fn populate_implementations_for_primitive_if_necessary(tcx: &ctxt, ...@@ -6336,10 +6336,10 @@ pub fn populate_implementations_for_primitive_if_necessary(tcx: &ctxt,
tcx.populated_external_primitive_impls.borrow_mut().insert(primitive_def_id); tcx.populated_external_primitive_impls.borrow_mut().insert(primitive_def_id);
} }
/// Populates the type context with all the implementations for the given type /// Populates the type context with all the inherent implementations for
/// if necessary. /// the given type if necessary.
pub fn populate_implementations_for_type_if_necessary(tcx: &ctxt, pub fn populate_inherent_implementations_for_type_if_necessary(tcx: &ctxt,
type_id: ast::DefId) { type_id: ast::DefId) {
if type_id.krate == LOCAL_CRATE { if type_id.krate == LOCAL_CRATE {
return return
} }
...@@ -6348,37 +6348,15 @@ pub fn populate_implementations_for_type_if_necessary(tcx: &ctxt, ...@@ -6348,37 +6348,15 @@ pub fn populate_implementations_for_type_if_necessary(tcx: &ctxt,
return return
} }
debug!("populate_implementations_for_type_if_necessary: searching for {:?}", type_id); debug!("populate_inherent_implementations_for_type_if_necessary: searching for {:?}", type_id);
let mut inherent_impls = Vec::new(); let mut inherent_impls = Vec::new();
csearch::each_implementation_for_type(&tcx.sess.cstore, type_id, |impl_def_id| { csearch::each_inherent_implementation_for_type(&tcx.sess.cstore, type_id, |impl_def_id| {
let impl_items = csearch::get_impl_items(&tcx.sess.cstore, impl_def_id); // Record the implementation.
inherent_impls.push(impl_def_id);
// Record the implementation, if needed
if let Some(trait_ref) = csearch::get_impl_trait(tcx, impl_def_id) {
let trait_def = lookup_trait_def(tcx, trait_ref.def_id);
trait_def.record_impl(tcx, impl_def_id, trait_ref);
} else {
inherent_impls.push(impl_def_id);
}
// For any methods that use a default implementation, add them to
// the map. This is a bit unfortunate.
for impl_item_def_id in &impl_items {
let method_def_id = impl_item_def_id.def_id();
match impl_or_trait_item(tcx, method_def_id) {
MethodTraitItem(method) => {
if let Some(source) = method.provided_source {
tcx.provided_method_sources
.borrow_mut()
.insert(method_def_id, source);
}
}
_ => {}
}
}
// Store the implementation info. // Store the implementation info.
let impl_items = csearch::get_impl_items(&tcx.sess.cstore, impl_def_id);
tcx.impl_items.borrow_mut().insert(impl_def_id, impl_items); tcx.impl_items.borrow_mut().insert(impl_def_id, impl_items);
}); });
......
...@@ -371,7 +371,7 @@ fn assemble_inherent_impl_for_primitive(&mut self, lang_def_id: Option<ast::DefI ...@@ -371,7 +371,7 @@ fn assemble_inherent_impl_for_primitive(&mut self, lang_def_id: Option<ast::DefI
fn assemble_inherent_impl_candidates_for_type(&mut self, def_id: ast::DefId) { fn assemble_inherent_impl_candidates_for_type(&mut self, def_id: ast::DefId) {
// Read the inherent implementation candidates for this type from the // Read the inherent implementation candidates for this type from the
// metadata if necessary. // metadata if necessary.
ty::populate_implementations_for_type_if_necessary(self.tcx(), def_id); ty::populate_inherent_implementations_for_type_if_necessary(self.tcx(), def_id);
if let Some(impl_infos) = self.tcx().inherent_impls.borrow().get(&def_id) { if let Some(impl_infos) = self.tcx().inherent_impls.borrow().get(&def_id) {
for &impl_def_id in &***impl_infos { for &impl_def_id in &***impl_infos {
......
...@@ -221,7 +221,7 @@ fn build_type(cx: &DocContext, tcx: &ty::ctxt, did: ast::DefId) -> clean::ItemEn ...@@ -221,7 +221,7 @@ fn build_type(cx: &DocContext, tcx: &ty::ctxt, did: ast::DefId) -> clean::ItemEn
pub fn build_impls(cx: &DocContext, tcx: &ty::ctxt, pub fn build_impls(cx: &DocContext, tcx: &ty::ctxt,
did: ast::DefId) -> Vec<clean::Item> { did: ast::DefId) -> Vec<clean::Item> {
ty::populate_implementations_for_type_if_necessary(tcx, did); ty::populate_inherent_implementations_for_type_if_necessary(tcx, did);
let mut impls = Vec::new(); let mut impls = Vec::new();
match tcx.inherent_impls.borrow().get(&did) { match tcx.inherent_impls.borrow().get(&did) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册