From acf33f2d6bca429196692d2b557c8e53e10bb9fe Mon Sep 17 00:00:00 2001 From: Camille GILLOT Date: Thu, 28 Nov 2019 20:18:29 +0100 Subject: [PATCH] Use Arena inside hir::ForeignItem. --- src/librustc/arena.rs | 2 ++ src/librustc/hir/check_attr.rs | 4 ++-- src/librustc/hir/intravisit.rs | 10 +++++----- src/librustc/hir/lowering/item.rs | 15 +++++++------- src/librustc/hir/map/collector.rs | 2 +- src/librustc/hir/map/mod.rs | 4 ++-- src/librustc/hir/mod.rs | 22 ++++++++++----------- src/librustc/hir/print.rs | 6 +++--- src/librustc/lint/context.rs | 2 +- src/librustc/lint/mod.rs | 6 +++--- src/librustc/middle/resolve_lifetime.rs | 2 +- src/librustc/middle/stability.rs | 4 ++-- src/librustc/middle/weak_lang_items.rs | 2 +- src/librustc_lint/builtin.rs | 2 +- src/librustc_lint/types.rs | 2 +- src/librustc_metadata/rmeta/encoder.rs | 6 +++--- src/librustc_passes/dead.rs | 4 ++-- src/librustc_passes/hir_stats.rs | 2 +- src/librustc_privacy/lib.rs | 8 ++++---- src/librustc_typeck/check/intrinsic.rs | 6 +++--- src/librustc_typeck/check/mod.rs | 14 +++++++++---- src/librustc_typeck/collect.rs | 2 +- src/librustc_typeck/variance/constraints.rs | 2 +- src/librustc_typeck/variance/terms.rs | 2 +- src/librustdoc/doctree.rs | 2 +- src/librustdoc/visit_ast.rs | 2 +- 26 files changed, 72 insertions(+), 63 deletions(-) diff --git a/src/librustc/arena.rs b/src/librustc/arena.rs index 56e089f20ba..3f0c0277f8a 100644 --- a/src/librustc/arena.rs +++ b/src/librustc/arena.rs @@ -126,6 +126,8 @@ [few] hir_forest: rustc::hir::map::Forest<$tcx>, [] attribute: syntax::ast::Attribute, [] global_asm: rustc::hir::GlobalAsm, + [] fn_decl: rustc::hir::FnDecl, + [] foreign_item: rustc::hir::ForeignItem<$tcx>, [] impl_item_ref: rustc::hir::ImplItemRef, [] macro_def: rustc::hir::MacroDef<$tcx>, [] path: rustc::hir::Path, diff --git a/src/librustc/hir/check_attr.rs b/src/librustc/hir/check_attr.rs index becbada225d..d5acde2f463 100644 --- a/src/librustc/hir/check_attr.rs +++ b/src/librustc/hir/check_attr.rs @@ -120,7 +120,7 @@ fn from_trait_item(trait_item: &TraitItem) -> Target { } } - fn from_foreign_item(foreign_item: &hir::ForeignItem) -> Target { + fn from_foreign_item(foreign_item: &hir::ForeignItem<'_>) -> Target { match foreign_item.kind { hir::ForeignItemKind::Fn(..) => Target::ForeignFn, hir::ForeignItemKind::Static(..) => Target::ForeignStatic, @@ -504,7 +504,7 @@ fn visit_trait_item(&mut self, trait_item: &'tcx TraitItem) { intravisit::walk_trait_item(self, trait_item) } - fn visit_foreign_item(&mut self, f_item: &'tcx hir::ForeignItem) { + fn visit_foreign_item(&mut self, f_item: &'tcx hir::ForeignItem<'tcx>) { let target = Target::from_foreign_item(f_item); self.check_attributes(f_item.hir_id, &f_item.attrs, &f_item.span, target, None); intravisit::walk_foreign_item(self, f_item) diff --git a/src/librustc/hir/intravisit.rs b/src/librustc/hir/intravisit.rs index 8fe3c7232b1..d10b5cd0373 100644 --- a/src/librustc/hir/intravisit.rs +++ b/src/librustc/hir/intravisit.rs @@ -250,7 +250,7 @@ fn visit_ident(&mut self, ident: Ident) { fn visit_mod(&mut self, m: &'v Mod, _s: Span, n: HirId) { walk_mod(self, m, n) } - fn visit_foreign_item(&mut self, i: &'v ForeignItem) { + fn visit_foreign_item(&mut self, i: &'v ForeignItem<'v>) { walk_foreign_item(self, i) } fn visit_local(&mut self, l: &'v Local) { @@ -498,7 +498,7 @@ pub fn walk_item<'v, V: Visitor<'v>>(visitor: &mut V, item: &'v Item<'v>) { } ItemKind::ForeignMod(ref foreign_module) => { visitor.visit_id(item.hir_id); - walk_list!(visitor, visit_foreign_item, &foreign_module.items); + walk_list!(visitor, visit_foreign_item, foreign_module.items); } ItemKind::GlobalAsm(_) => { visitor.visit_id(item.hir_id); @@ -735,13 +735,13 @@ pub fn walk_pat<'v, V: Visitor<'v>>(visitor: &mut V, pattern: &'v Pat) { } } -pub fn walk_foreign_item<'v, V: Visitor<'v>>(visitor: &mut V, foreign_item: &'v ForeignItem) { +pub fn walk_foreign_item<'v, V: Visitor<'v>>(visitor: &mut V, foreign_item: &'v ForeignItem<'v>) { visitor.visit_id(foreign_item.hir_id); visitor.visit_vis(&foreign_item.vis); visitor.visit_ident(foreign_item.ident); match foreign_item.kind { - ForeignItemKind::Fn(ref function_declaration, ref param_names, ref generics) => { + ForeignItemKind::Fn(ref function_declaration, param_names, ref generics) => { visitor.visit_generics(generics); visitor.visit_fn_decl(function_declaration); for ¶m_name in param_names { @@ -752,7 +752,7 @@ pub fn walk_foreign_item<'v, V: Visitor<'v>>(visitor: &mut V, foreign_item: &'v ForeignItemKind::Type => (), } - walk_list!(visitor, visit_attribute, &foreign_item.attrs); + walk_list!(visitor, visit_attribute, foreign_item.attrs); } pub fn walk_param_bound<'v, V: Visitor<'v>>(visitor: &mut V, bound: &'v GenericBound) { diff --git a/src/librustc/hir/lowering/item.rs b/src/librustc/hir/lowering/item.rs index 0bc08dac151..a19ddd5fd94 100644 --- a/src/librustc/hir/lowering/item.rs +++ b/src/librustc/hir/lowering/item.rs @@ -706,12 +706,12 @@ fn rebuild_vis(&mut self, vis: &hir::Visibility) -> hir::Visibility { respan(vis.span, vis_kind) } - fn lower_foreign_item(&mut self, i: &ForeignItem) -> hir::ForeignItem { + fn lower_foreign_item(&mut self, i: &ForeignItem) -> hir::ForeignItem<'hir> { let def_id = self.resolver.definitions().local_def_id(i.id); hir::ForeignItem { hir_id: self.lower_node_id(i.id), ident: i.ident, - attrs: self.lower_attrs(&i.attrs), + attrs: self.lower_attrs_arena(&i.attrs), kind: match i.kind { ForeignItemKind::Fn(ref fdec, ref generics) => { let (generics, (fn_dec, fn_args)) = self.add_in_band_defs( @@ -726,12 +726,14 @@ fn lower_foreign_item(&mut self, i: &ForeignItem) -> hir::ForeignItem { ) }, ); + let fn_dec = self.arena.alloc(fn_dec.into_inner()); + let fn_args = self.arena.alloc_from_iter(fn_args.into_iter()); hir::ForeignItemKind::Fn(fn_dec, fn_args, generics) } ForeignItemKind::Static(ref t, m) => { hir::ForeignItemKind::Static( - self.lower_ty(t, ImplTraitContext::disallowed()), m) + self.arena.alloc(self.lower_ty(t, ImplTraitContext::disallowed()).into_inner()), m) } ForeignItemKind::Ty => hir::ForeignItemKind::Type, ForeignItemKind::Macro(_) => panic!("macro shouldn't exist here"), @@ -741,13 +743,12 @@ fn lower_foreign_item(&mut self, i: &ForeignItem) -> hir::ForeignItem { } } - fn lower_foreign_mod(&mut self, fm: &ForeignMod) -> hir::ForeignMod { + fn lower_foreign_mod(&mut self, fm: &ForeignMod) -> hir::ForeignMod<'hir> { hir::ForeignMod { abi: fm.abi.map_or(abi::Abi::C, |abi| self.lower_abi(abi)), - items: fm.items + items: self.arena.alloc_from_iter(fm.items .iter() - .map(|x| self.lower_foreign_item(x)) - .collect(), + .map(|x| self.lower_foreign_item(x))), } } diff --git a/src/librustc/hir/map/collector.rs b/src/librustc/hir/map/collector.rs index c460d9ef6cc..c29ad49aca1 100644 --- a/src/librustc/hir/map/collector.rs +++ b/src/librustc/hir/map/collector.rs @@ -385,7 +385,7 @@ fn visit_item(&mut self, i: &'hir Item<'hir>) { }); } - fn visit_foreign_item(&mut self, foreign_item: &'hir ForeignItem) { + fn visit_foreign_item(&mut self, foreign_item: &'hir ForeignItem<'hir>) { self.insert(foreign_item.span, foreign_item.hir_id, Node::ForeignItem(foreign_item)); self.with_parent(foreign_item.hir_id, |this| { diff --git a/src/librustc/hir/map/mod.rs b/src/librustc/hir/map/mod.rs index 982753da5f6..df4bc7cc817 100644 --- a/src/librustc/hir/map/mod.rs +++ b/src/librustc/hir/map/mod.rs @@ -1002,7 +1002,7 @@ pub fn expect_variant(&self, id: HirId) -> &'hir Variant { } } - pub fn expect_foreign_item(&self, id: HirId) -> &'hir ForeignItem { + pub fn expect_foreign_item(&self, id: HirId) -> &'hir ForeignItem<'hir> { match self.find(id) { Some(Node::ForeignItem(item)) => item, _ => bug!("expected foreign item, found {}", self.node_to_string(id)) @@ -1249,7 +1249,7 @@ trait Named { impl Named for Spanned { fn name(&self) -> Name { self.node.name() } } impl Named for Item<'_> { fn name(&self) -> Name { self.ident.name } } -impl Named for ForeignItem { fn name(&self) -> Name { self.ident.name } } +impl Named for ForeignItem<'_> { fn name(&self) -> Name { self.ident.name } } impl Named for Variant { fn name(&self) -> Name { self.ident.name } } impl Named for StructField { fn name(&self) -> Name { self.ident.name } } impl Named for TraitItem { fn name(&self) -> Name { self.ident.name } } diff --git a/src/librustc/hir/mod.rs b/src/librustc/hir/mod.rs index 063c0f9b278..d3137ee6ac1 100644 --- a/src/librustc/hir/mod.rs +++ b/src/librustc/hir/mod.rs @@ -2252,9 +2252,9 @@ pub struct Mod { } #[derive(RustcEncodable, RustcDecodable, Debug, HashStable)] -pub struct ForeignMod { +pub struct ForeignMod<'hir> { pub abi: Abi, - pub items: HirVec, + pub items: &'hir [ForeignItem<'hir>], } #[derive(RustcEncodable, RustcDecodable, Debug, HashStable)] @@ -2491,7 +2491,7 @@ pub enum ItemKind<'hir> { /// A module. Mod(Mod), /// An external module, e.g. `extern { .. }`. - ForeignMod(ForeignMod), + ForeignMod(ForeignMod<'hir>), /// Module-level inline assembly (from `global_asm!`). GlobalAsm(&'hir GlobalAsm), /// A type alias, e.g., `type Foo = Bar`. @@ -2607,11 +2607,11 @@ pub enum AssocItemKind { } #[derive(RustcEncodable, RustcDecodable, Debug, HashStable)] -pub struct ForeignItem { +pub struct ForeignItem<'hir> { #[stable_hasher(project(name))] pub ident: Ident, - pub attrs: HirVec, - pub kind: ForeignItemKind, + pub attrs: &'hir [Attribute], + pub kind: ForeignItemKind<'hir>, pub hir_id: HirId, pub span: Span, pub vis: Visibility, @@ -2619,16 +2619,16 @@ pub struct ForeignItem { /// An item within an `extern` block. #[derive(RustcEncodable, RustcDecodable, Debug, HashStable)] -pub enum ForeignItemKind { +pub enum ForeignItemKind<'hir> { /// A foreign function. - Fn(P, HirVec, Generics), + Fn(&'hir FnDecl, &'hir [Ident], Generics), /// A foreign static item (`static ext: u8`). - Static(P, Mutability), + Static(&'hir Ty, Mutability), /// A foreign type. Type, } -impl ForeignItemKind { +impl ForeignItemKind<'hir> { pub fn descriptive_variant(&self) -> &str { match *self { ForeignItemKind::Fn(..) => "foreign function", @@ -2788,7 +2788,7 @@ pub fn contains_extern_indicator(&self) -> bool { pub enum Node<'hir> { Param(&'hir Param), Item(&'hir Item<'hir>), - ForeignItem(&'hir ForeignItem), + ForeignItem(&'hir ForeignItem<'hir>), TraitItem(&'hir TraitItem), ImplItem(&'hir ImplItem), Variant(&'hir Variant), diff --git a/src/librustc/hir/print.rs b/src/librustc/hir/print.rs index e6398b8c2e9..b6f7f840d08 100644 --- a/src/librustc/hir/print.rs +++ b/src/librustc/hir/print.rs @@ -267,11 +267,11 @@ pub fn print_mod(&mut self, _mod: &hir::Mod, attrs: &[ast::Attribute]) { } pub fn print_foreign_mod(&mut self, - nmod: &hir::ForeignMod, + nmod: &hir::ForeignMod<'_>, attrs: &[ast::Attribute]) { self.print_inner_attributes(attrs); - for item in &nmod.items { + for item in nmod.items { self.print_foreign_item(item); } } @@ -361,7 +361,7 @@ pub fn print_type(&mut self, ty: &hir::Ty) { self.end() } - pub fn print_foreign_item(&mut self, item: &hir::ForeignItem) { + pub fn print_foreign_item(&mut self, item: &hir::ForeignItem<'_>) { self.hardbreak_if_not_bol(); self.maybe_print_comment(item.span.lo()); self.print_outer_attributes(&item.attrs); diff --git a/src/librustc/lint/context.rs b/src/librustc/lint/context.rs index 4b7d2f67332..c3cd50b4885 100644 --- a/src/librustc/lint/context.rs +++ b/src/librustc/lint/context.rs @@ -943,7 +943,7 @@ fn visit_item(&mut self, it: &'tcx hir::Item<'tcx>) { self.context.generics = generics; } - fn visit_foreign_item(&mut self, it: &'tcx hir::ForeignItem) { + fn visit_foreign_item(&mut self, it: &'tcx hir::ForeignItem<'tcx>) { self.with_lint_attrs(it.hir_id, &it.attrs, |cx| { cx.with_param_env(it.hir_id, |cx| { lint_callback!(cx, check_foreign_item, it); diff --git a/src/librustc/lint/mod.rs b/src/librustc/lint/mod.rs index c8dc761eef9..79fb53c92b0 100644 --- a/src/librustc/lint/mod.rs +++ b/src/librustc/lint/mod.rs @@ -94,8 +94,8 @@ pub fn get_lints() -> LintArray { $crate::lint_array!($($lint),*) } fn check_crate_post(a: &$hir hir::Crate<$hir>); fn check_mod(a: &$hir hir::Mod, b: Span, c: hir::HirId); fn check_mod_post(a: &$hir hir::Mod, b: Span, c: hir::HirId); - fn check_foreign_item(a: &$hir hir::ForeignItem); - fn check_foreign_item_post(a: &$hir hir::ForeignItem); + fn check_foreign_item(a: &$hir hir::ForeignItem<$hir>); + fn check_foreign_item_post(a: &$hir hir::ForeignItem<$hir>); fn check_item(a: &$hir hir::Item<$hir>); fn check_item_post(a: &$hir hir::Item<$hir>); fn check_local(a: &$hir hir::Local); @@ -610,7 +610,7 @@ fn visit_item(&mut self, it: &'tcx hir::Item<'tcx>) { }); } - fn visit_foreign_item(&mut self, it: &'tcx hir::ForeignItem) { + fn visit_foreign_item(&mut self, it: &'tcx hir::ForeignItem<'tcx>) { self.with_lint_attrs(it.hir_id, &it.attrs, |builder| { intravisit::walk_foreign_item(builder, it); }) diff --git a/src/librustc/middle/resolve_lifetime.rs b/src/librustc/middle/resolve_lifetime.rs index 4fd117b5980..7a852ef9ef4 100644 --- a/src/librustc/middle/resolve_lifetime.rs +++ b/src/librustc/middle/resolve_lifetime.rs @@ -536,7 +536,7 @@ fn visit_item(&mut self, item: &'tcx hir::Item<'tcx>) { } } - fn visit_foreign_item(&mut self, item: &'tcx hir::ForeignItem) { + fn visit_foreign_item(&mut self, item: &'tcx hir::ForeignItem<'tcx>) { match item.kind { hir::ForeignItemKind::Fn(ref decl, _, ref generics) => { self.visit_early_late(None, decl, generics, |this| { diff --git a/src/librustc/middle/stability.rs b/src/librustc/middle/stability.rs index 1c717f0f1f5..27830c86ed1 100644 --- a/src/librustc/middle/stability.rs +++ b/src/librustc/middle/stability.rs @@ -318,7 +318,7 @@ fn visit_struct_field(&mut self, s: &'tcx StructField) { }); } - fn visit_foreign_item(&mut self, i: &'tcx hir::ForeignItem) { + fn visit_foreign_item(&mut self, i: &'tcx hir::ForeignItem<'tcx>) { self.annotate(i.hir_id, &i.attrs, i.span, AnnotationKind::Required, |v| { intravisit::walk_foreign_item(v, i); }); @@ -392,7 +392,7 @@ fn visit_struct_field(&mut self, s: &'tcx StructField) { intravisit::walk_struct_field(self, s); } - fn visit_foreign_item(&mut self, i: &'tcx hir::ForeignItem) { + fn visit_foreign_item(&mut self, i: &'tcx hir::ForeignItem<'tcx>) { self.check_missing_stability(i.hir_id, i.span, i.kind.descriptive_variant()); intravisit::walk_foreign_item(self, i); } diff --git a/src/librustc/middle/weak_lang_items.rs b/src/librustc/middle/weak_lang_items.rs index 48c1226232f..2acea7c5b68 100644 --- a/src/librustc/middle/weak_lang_items.rs +++ b/src/librustc/middle/weak_lang_items.rs @@ -136,7 +136,7 @@ fn nested_visit_map<'this>(&'this mut self) -> NestedVisitorMap<'this, 'v> { NestedVisitorMap::None } - fn visit_foreign_item(&mut self, i: &hir::ForeignItem) { + fn visit_foreign_item(&mut self, i: &hir::ForeignItem<'_>) { if let Some((lang_item, _)) = lang_items::extract(&i.attrs) { self.register(lang_item, i.span); } diff --git a/src/librustc_lint/builtin.rs b/src/librustc_lint/builtin.rs index 626c83713d0..030fb8dc339 100644 --- a/src/librustc_lint/builtin.rs +++ b/src/librustc_lint/builtin.rs @@ -996,7 +996,7 @@ fn check_item(&mut self, cx: &LateContext<'_, '_>, item: &hir::Item<'_>) { self.perform_lint(cx, "item", item.hir_id, &item.vis, item.span, true); } - fn check_foreign_item(&mut self, cx: &LateContext<'_, '_>, foreign_item: &hir::ForeignItem) { + fn check_foreign_item(&mut self, cx: &LateContext<'_, '_>, foreign_item: &hir::ForeignItem<'tcx>) { self.perform_lint(cx, "item", foreign_item.hir_id, &foreign_item.vis, foreign_item.span, true); } diff --git a/src/librustc_lint/types.rs b/src/librustc_lint/types.rs index b4ae379f1bb..f1cd2037edd 100644 --- a/src/librustc_lint/types.rs +++ b/src/librustc_lint/types.rs @@ -1009,7 +1009,7 @@ fn check_foreign_static(&mut self, id: hir::HirId, span: Span) { } impl<'a, 'tcx> LateLintPass<'a, 'tcx> for ImproperCTypes { - fn check_foreign_item(&mut self, cx: &LateContext<'_, '_>, it: &hir::ForeignItem) { + fn check_foreign_item(&mut self, cx: &LateContext<'_, '_>, it: &hir::ForeignItem<'_>) { let mut vis = ImproperCTypesVisitor { cx }; let abi = cx.tcx.hir().get_foreign_abi(it.hir_id); if let Abi::Rust | Abi::RustCall | Abi::RustIntrinsic | Abi::PlatformIntrinsic = abi { diff --git a/src/librustc_metadata/rmeta/encoder.rs b/src/librustc_metadata/rmeta/encoder.rs index 4d7e18828d1..93e04c18f5f 100644 --- a/src/librustc_metadata/rmeta/encoder.rs +++ b/src/librustc_metadata/rmeta/encoder.rs @@ -1525,7 +1525,7 @@ fn encode_dylib_dependency_formats(&mut self) -> Lazy<[Option fn encode_info_for_foreign_item( &mut self, def_id: DefId, - nitem: &hir::ForeignItem, + nitem: &hir::ForeignItem<'_>, ) { let tcx = self.tcx; @@ -1551,7 +1551,7 @@ fn encode_info_for_foreign_item( record!(self.per_def.visibility[def_id] <- ty::Visibility::from_hir(&nitem.vis, nitem.hir_id, self.tcx)); record!(self.per_def.span[def_id] <- nitem.span); - record!(self.per_def.attributes[def_id] <- &nitem.attrs); + record!(self.per_def.attributes[def_id] <- nitem.attrs); self.encode_stability(def_id); self.encode_const_stability(def_id); self.encode_deprecation(def_id); @@ -1590,7 +1590,7 @@ fn visit_item(&mut self, item: &'tcx hir::Item<'tcx>) { } self.encode_addl_info_for_item(item); } - fn visit_foreign_item(&mut self, ni: &'tcx hir::ForeignItem) { + fn visit_foreign_item(&mut self, ni: &'tcx hir::ForeignItem<'tcx>) { intravisit::walk_foreign_item(self, ni); let def_id = self.tcx.hir().local_def_id(ni.hir_id); self.encode_info_for_foreign_item(def_id, ni); diff --git a/src/librustc_passes/dead.rs b/src/librustc_passes/dead.rs index c7f553069c2..ee67e44afc8 100644 --- a/src/librustc_passes/dead.rs +++ b/src/librustc_passes/dead.rs @@ -510,7 +510,7 @@ fn should_warn_about_variant(&mut self, variant: &hir::Variant) -> bool { &variant.attrs) } - fn should_warn_about_foreign_item(&mut self, fi: &hir::ForeignItem) -> bool { + fn should_warn_about_foreign_item(&mut self, fi: &hir::ForeignItem<'_>) -> bool { !self.symbol_is_live(fi.hir_id) && !has_allow_dead_code_or_lang_attr(self.tcx, fi.hir_id, &fi.attrs) } @@ -621,7 +621,7 @@ fn visit_variant(&mut self, } } - fn visit_foreign_item(&mut self, fi: &'tcx hir::ForeignItem) { + fn visit_foreign_item(&mut self, fi: &'tcx hir::ForeignItem<'tcx>) { if self.should_warn_about_foreign_item(fi) { self.warn_dead_code(fi.hir_id, fi.span, fi.ident.name, fi.kind.descriptive_variant(), "used"); diff --git a/src/librustc_passes/hir_stats.rs b/src/librustc_passes/hir_stats.rs index d7639362c57..4cde255fc83 100644 --- a/src/librustc_passes/hir_stats.rs +++ b/src/librustc_passes/hir_stats.rs @@ -133,7 +133,7 @@ fn visit_mod(&mut self, m: &'v hir::Mod, _s: Span, n: hir::HirId) { hir_visit::walk_mod(self, m, n) } - fn visit_foreign_item(&mut self, i: &'v hir::ForeignItem) { + fn visit_foreign_item(&mut self, i: &'v hir::ForeignItem<'v>) { self.record("ForeignItem", Id::Node(i.hir_id), i); hir_visit::walk_foreign_item(self, i) } diff --git a/src/librustc_privacy/lib.rs b/src/librustc_privacy/lib.rs index b60c6fe183f..5963561c5bb 100644 --- a/src/librustc_privacy/lib.rs +++ b/src/librustc_privacy/lib.rs @@ -708,7 +708,7 @@ fn visit_item(&mut self, item: &'tcx hir::Item<'tcx>) { } } hir::ItemKind::ForeignMod(ref foreign_mod) => { - for foreign_item in &foreign_mod.items { + for foreign_item in foreign_mod.items { if foreign_item.vis.node.is_pub() { self.update(foreign_item.hir_id, item_level); } @@ -812,7 +812,7 @@ fn visit_item(&mut self, item: &'tcx hir::Item<'tcx>) { } // Visit everything, but foreign items have their own levels. hir::ItemKind::ForeignMod(ref foreign_mod) => { - for foreign_item in &foreign_mod.items { + for foreign_item in foreign_mod.items { let foreign_item_level = self.get(foreign_item.hir_id); if foreign_item_level.is_some() { self.reach(foreign_item.hir_id, foreign_item_level) @@ -1621,7 +1621,7 @@ fn visit_generics(&mut self, generics: &'tcx hir::Generics) { } } - fn visit_foreign_item(&mut self, item: &'tcx hir::ForeignItem) { + fn visit_foreign_item(&mut self, item: &'tcx hir::ForeignItem<'tcx>) { if self.access_levels.is_reachable(item.hir_id) { intravisit::walk_foreign_item(self, item) } @@ -1898,7 +1898,7 @@ fn visit_item(&mut self, item: &'tcx hir::Item<'tcx>) { } // Subitems of foreign modules have their own publicity. hir::ItemKind::ForeignMod(ref foreign_mod) => { - for foreign_item in &foreign_mod.items { + for foreign_item in foreign_mod.items { let vis = ty::Visibility::from_hir(&foreign_item.vis, item.hir_id, tcx); self.check(foreign_item.hir_id, vis).generics().predicates().ty(); } diff --git a/src/librustc_typeck/check/intrinsic.rs b/src/librustc_typeck/check/intrinsic.rs index c5eb94e2165..d6661a7ec6a 100644 --- a/src/librustc_typeck/check/intrinsic.rs +++ b/src/librustc_typeck/check/intrinsic.rs @@ -17,7 +17,7 @@ fn equate_intrinsic_type<'tcx>( tcx: TyCtxt<'tcx>, - it: &hir::ForeignItem, + it: &hir::ForeignItem<'_>, n_tps: usize, abi: Abi, safety: hir::Unsafety, @@ -83,7 +83,7 @@ pub fn intrinsic_operation_unsafety(intrinsic: &str) -> hir::Unsafety { /// Remember to add all intrinsics here, in librustc_codegen_llvm/intrinsic.rs, /// and in libcore/intrinsics.rs -pub fn check_intrinsic_type(tcx: TyCtxt<'_>, it: &hir::ForeignItem) { +pub fn check_intrinsic_type(tcx: TyCtxt<'_>, it: &hir::ForeignItem<'_>) { let param = |n| tcx.mk_ty_param(n, Symbol::intern(&format!("P{}", n))); let name = it.ident.as_str(); @@ -399,7 +399,7 @@ pub fn check_intrinsic_type(tcx: TyCtxt<'_>, it: &hir::ForeignItem) { } /// Type-check `extern "platform-intrinsic" { ... }` functions. -pub fn check_platform_intrinsic_type(tcx: TyCtxt<'_>, it: &hir::ForeignItem) { +pub fn check_platform_intrinsic_type(tcx: TyCtxt<'_>, it: &hir::ForeignItem<'_>) { let param = |n| { let name = Symbol::intern(&format!("P{}", n)); tcx.mk_ty_param(n, name) diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs index 90e31f85a12..4c83ee1c644 100644 --- a/src/librustc_typeck/check/mod.rs +++ b/src/librustc_typeck/check/mod.rs @@ -1766,15 +1766,15 @@ pub fn check_item_type<'tcx>(tcx: TyCtxt<'tcx>, it: &'tcx hir::Item<'tcx>) { check_abi(tcx, it.span, m.abi); if m.abi == Abi::RustIntrinsic { - for item in &m.items { + for item in m.items { intrinsic::check_intrinsic_type(tcx, item); } } else if m.abi == Abi::PlatformIntrinsic { - for item in &m.items { + for item in m.items { intrinsic::check_platform_intrinsic_type(tcx, item); } } else { - for item in &m.items { + for item in m.items { let generics = tcx.generics_of(tcx.hir().local_def_id(item.hir_id)); let own_counts = generics.own_counts(); if generics.params.len() - own_counts.lifetimes != 0 { @@ -4689,7 +4689,13 @@ fn suggest_fn_call( Some(Node::ForeignItem(hir::ForeignItem { kind: hir::ForeignItemKind::Fn(_, idents, _), .. - })) | + })) => sugg_call = idents.iter() + .map(|ident| if ident.name != kw::SelfLower { + ident.to_string() + } else { + "_".to_string() + }).collect::>() + .join(", "), Some(Node::TraitItem(hir::TraitItem { kind: hir::TraitItemKind::Method(.., hir::TraitMethod::Required(idents)), .. diff --git a/src/librustc_typeck/collect.rs b/src/librustc_typeck/collect.rs index 701f16f37b5..02831784c96 100644 --- a/src/librustc_typeck/collect.rs +++ b/src/librustc_typeck/collect.rs @@ -417,7 +417,7 @@ fn convert_item(tcx: TyCtxt<'_>, item_id: hir::HirId) { | hir::ItemKind::Mod(_) | hir::ItemKind::GlobalAsm(_) => {} hir::ItemKind::ForeignMod(ref foreign_mod) => { - for item in &foreign_mod.items { + for item in foreign_mod.items { let def_id = tcx.hir().local_def_id(item.hir_id); tcx.generics_of(def_id); tcx.type_of(def_id); diff --git a/src/librustc_typeck/variance/constraints.rs b/src/librustc_typeck/variance/constraints.rs index 41854407a09..d15d8d09df7 100644 --- a/src/librustc_typeck/variance/constraints.rs +++ b/src/librustc_typeck/variance/constraints.rs @@ -93,7 +93,7 @@ fn visit_item(&mut self, item: &hir::Item<'_>) { } hir::ItemKind::ForeignMod(ref foreign_mod) => { - for foreign_item in &foreign_mod.items { + for foreign_item in foreign_mod.items { if let hir::ForeignItemKind::Fn(..) = foreign_item.kind { self.visit_node_helper(foreign_item.hir_id); } diff --git a/src/librustc_typeck/variance/terms.rs b/src/librustc_typeck/variance/terms.rs index e122b334b31..7567bb791fa 100644 --- a/src/librustc_typeck/variance/terms.rs +++ b/src/librustc_typeck/variance/terms.rs @@ -156,7 +156,7 @@ fn visit_item(&mut self, item: &hir::Item<'_>) { } hir::ItemKind::ForeignMod(ref foreign_mod) => { - for foreign_item in &foreign_mod.items { + for foreign_item in foreign_mod.items { if let hir::ForeignItemKind::Fn(..) = foreign_item.kind { self.add_inferreds_for_item(foreign_item.hir_id); } diff --git a/src/librustdoc/doctree.rs b/src/librustdoc/doctree.rs index 83a33c840e3..57208bd5966 100644 --- a/src/librustdoc/doctree.rs +++ b/src/librustdoc/doctree.rs @@ -217,7 +217,7 @@ pub struct ForeignItem<'hir> { pub vis: &'hir hir::Visibility, pub id: hir::HirId, pub name: Name, - pub kind: &'hir hir::ForeignItemKind, + pub kind: &'hir hir::ForeignItemKind<'hir>, pub attrs: &'hir [ast::Attribute], pub whence: Span, } diff --git a/src/librustdoc/visit_ast.rs b/src/librustdoc/visit_ast.rs index b9e409f3d58..2c2a51928d9 100644 --- a/src/librustdoc/visit_ast.rs +++ b/src/librustdoc/visit_ast.rs @@ -363,7 +363,7 @@ fn visit_item(&mut self, item: &'tcx hir::Item, match item.kind { hir::ItemKind::ForeignMod(ref fm) => { - for item in &fm.items { + for item in fm.items { self.visit_foreign_item(item, None, om); } } -- GitLab