fn visit_where_predicate(&mut self, predicate: &'v WherePredicate) {
walk_where_predicate(self, predicate)
}
+ fn visit_fn_decl(&mut self, fd: &'v FnDecl) {
+ walk_fn_decl(self, fd)
+ }
fn visit_fn(&mut self, fk: FnKind<'v>, fd: &'v FnDecl, b: ExprId, s: Span, id: NodeId) {
walk_fn(self, fk, fd, b, s, id)
}
walk_list!(visitor, visit_ty, tuple_element_types);
}
TyBareFn(ref function_declaration) => {
- walk_fn_decl(visitor, &function_declaration.decl);
+ visitor.visit_fn_decl(&function_declaration.decl);
walk_list!(visitor, visit_lifetime_def, &function_declaration.lifetimes);
}
TyPath(ref qpath) => {
match foreign_item.node {
ForeignItemFn(ref function_declaration, ref generics) => {
- walk_fn_decl(visitor, function_declaration);
+ visitor.visit_fn_decl(function_declaration);
visitor.visit_generics(generics)
}
ForeignItemStatic(ref typ, _) => visitor.visit_ty(typ),
_span: Span,
id: NodeId) {
visitor.visit_id(id);
- walk_fn_decl(visitor, function_declaration);
+ visitor.visit_fn_decl(function_declaration);
walk_fn_kind(visitor, function_kind);
visitor.visit_body(body_id)
}
_span: Span,
id: NodeId) {
visitor.visit_id(id);
- walk_fn_decl(visitor, function_declaration);
+ visitor.visit_fn_decl(function_declaration);
walk_fn_kind(visitor, function_kind);
visitor.visit_expr(body)
}
MethodTraitItem(ref sig, None) => {
visitor.visit_id(trait_item.id);
visitor.visit_generics(&sig.generics);
- walk_fn_decl(visitor, &sig.decl);
+ visitor.visit_fn_decl(&sig.decl);
}
MethodTraitItem(ref sig, Some(body_id)) => {
visitor.visit_fn(FnKind::Method(trait_item.name,
SawLifetimeDef(usize),
SawMod,
- SawForeignItem,
+ SawForeignItem(SawForeignItemComponent),
SawItem(SawItemComponent),
SawTy(SawTyComponent),
+ SawFnDecl(bool),
SawGenerics,
SawTraitItem(SawTraitOrImplItemComponent),
SawImplItem(SawTraitOrImplItemComponent),
SawItemConst,
SawItemFn(Unsafety, Constness, Abi),
SawItemMod,
- SawItemForeignMod,
+ SawItemForeignMod(Abi),
SawItemTy,
SawItemEnum,
SawItemStruct,
ItemConst(..) =>SawItemConst,
ItemFn(_, unsafety, constness, abi, _, _) => SawItemFn(unsafety, constness, abi),
ItemMod(..) => SawItemMod,
- ItemForeignMod(..) => SawItemForeignMod,
+ ItemForeignMod(ref fm) => SawItemForeignMod(fm.abi),
ItemTy(..) => SawItemTy,
ItemEnum(..) => SawItemEnum,
ItemStruct(..) => SawItemStruct,
}
}
+#[derive(Hash)]
+enum SawForeignItemComponent {
+ Static { mutable: bool },
+ Fn,
+}
+
#[derive(Hash)]
enum SawPatComponent {
SawPatWild,
fn visit_foreign_item(&mut self, i: &'tcx ForeignItem) {
debug!("visit_foreign_item: st={:?}", self.st);
- SawForeignItem.hash(self.st);
+ match i.node {
+ ForeignItemFn(..) => {
+ SawForeignItem(SawForeignItemComponent::Fn)
+ }
+ ForeignItemStatic(_, mutable) => {
+ SawForeignItem(SawForeignItemComponent::Static {
+ mutable: mutable
+ })
+ }
+ }.hash(self.st);
+
hash_span!(self, i.span);
hash_attrs!(self, &i.attrs);
visit::walk_foreign_item(self, i)
visit::walk_generics(self, g)
}
+ fn visit_fn_decl(&mut self, fd: &'tcx FnDecl) {
+ debug!("visit_fn_decl: st={:?}", self.st);
+ SawFnDecl(fd.variadic).hash(self.st);
+ visit::walk_fn_decl(self, fd)
+ }
+
fn visit_trait_item(&mut self, ti: &'tcx TraitItem) {
debug!("visit_trait_item: st={:?}", self.st);