fn impl_item(&self, id: ImplItemId) -> &'hir ImplItem<'hir>;
}
+/// An erased version of `Map<'hir>`, using dynamic dispatch.
+/// NOTE: This type is effectively only usable with `NestedVisitorMap::None`.
+pub struct ErasedMap<'hir>(&'hir dyn Map<'hir>);
+
+impl<'hir> Map<'hir> for ErasedMap<'hir> {
+ fn body(&self, id: BodyId) -> &'hir Body<'hir> {
+ self.0.body(id)
+ }
+ fn item(&self, id: HirId) -> &'hir Item<'hir> {
+ self.0.item(id)
+ }
+ fn trait_item(&self, id: TraitItemId) -> &'hir TraitItem<'hir> {
+ self.0.trait_item(id)
+ }
+ fn impl_item(&self, id: ImplItemId) -> &'hir ImplItem<'hir> {
+ self.0.impl_item(id)
+ }
+}
+
/// Specifies what nested things a visitor wants to visit. The most
/// common choice is `OnlyBodies`, which will cause the visitor to
/// visit fn bodies for fns that it encounters, but skip over nested
visitor.visit_ty(ty);
walk_list!(visitor, visit_nested_body, default);
}
- TraitItemKind::Fn(ref sig, TraitMethod::Required(param_names)) => {
+ TraitItemKind::Fn(ref sig, TraitFn::Required(param_names)) => {
visitor.visit_id(trait_item.hir_id);
visitor.visit_fn_decl(&sig.decl);
for ¶m_name in param_names {
visitor.visit_ident(param_name);
}
}
- TraitItemKind::Fn(ref sig, TraitMethod::Provided(body_id)) => {
+ TraitItemKind::Fn(ref sig, TraitFn::Provided(body_id)) => {
visitor.visit_fn(
FnKind::Method(trait_item.ident, sig, None, &trait_item.attrs),
&sig.decl,
visitor.visit_ty(ty);
visitor.visit_nested_body(body);
}
- ImplItemKind::Method(ref sig, body_id) => {
+ ImplItemKind::Fn(ref sig, body_id) => {
visitor.visit_fn(
FnKind::Method(impl_item.ident, sig, Some(&impl_item.vis), &impl_item.attrs),
&sig.decl,