From 190b4a71528a1eb83d43119db6877d7051cf8add Mon Sep 17 00:00:00 2001 From: Santiago Pastorino Date: Tue, 31 May 2022 14:54:30 -0300 Subject: [PATCH] Add itctx: ImplTraitContext arg to add_implicit_generics --- compiler/rustc_ast_lowering/src/item.rs | 19 ++++++++++++------- compiler/rustc_ast_lowering/src/lib.rs | 12 ++++++++++-- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/compiler/rustc_ast_lowering/src/item.rs b/compiler/rustc_ast_lowering/src/item.rs index e12a3ad3b79..f05a739a949 100644 --- a/compiler/rustc_ast_lowering/src/item.rs +++ b/compiler/rustc_ast_lowering/src/item.rs @@ -266,10 +266,12 @@ impl<'hir> LoweringContext<'_, 'hir> { let body_id = this.lower_maybe_async_body(span, &decl, asyncness, body.as_deref()); - let (generics, decl) = this.add_implicit_generics(generics, id, |this| { - let ret_id = asyncness.opt_return_id(); - this.lower_fn_decl(&decl, Some(id), FnDeclKind::Fn, ret_id) - }); + let itctx = ImplTraitContext::Universal(this.current_hir_id_owner); + let (generics, decl) = + this.add_implicit_generics(generics, id, itctx, |this| { + let ret_id = asyncness.opt_return_id(); + this.lower_fn_decl(&decl, Some(id), FnDeclKind::Fn, ret_id) + }); let sig = hir::FnSig { decl, header: this.lower_fn_header(header), @@ -382,8 +384,9 @@ impl<'hir> LoweringContext<'_, 'hir> { // method, it will not be considered an in-band // lifetime to be added, but rather a reference to a // parent lifetime. + let itctx = ImplTraitContext::Universal(self.current_hir_id_owner); let (generics, (trait_ref, lowered_ty)) = - self.add_implicit_generics(ast_generics, id, |this| { + self.add_implicit_generics(ast_generics, id, itctx, |this| { let trait_ref = trait_ref.as_ref().map(|trait_ref| { this.lower_trait_ref( trait_ref, @@ -647,8 +650,9 @@ impl<'hir> LoweringContext<'_, 'hir> { kind: match i.kind { ForeignItemKind::Fn(box Fn { ref sig, ref generics, .. }) => { let fdec = &sig.decl; + let itctx = ImplTraitContext::Universal(self.current_hir_id_owner); let (generics, (fn_dec, fn_args)) = - self.add_implicit_generics(generics, i.id, |this| { + self.add_implicit_generics(generics, i.id, itctx, |this| { ( // Disallow `impl Trait` in foreign items. this.lower_fn_decl(fdec, None, FnDeclKind::ExternFn, None), @@ -1227,7 +1231,8 @@ impl<'hir> LoweringContext<'_, 'hir> { is_async: Option, ) -> (&'hir hir::Generics<'hir>, hir::FnSig<'hir>) { let header = self.lower_fn_header(sig.header); - let (generics, decl) = self.add_implicit_generics(generics, id, |this| { + let itctx = ImplTraitContext::Universal(self.current_hir_id_owner); + let (generics, decl) = self.add_implicit_generics(generics, id, itctx, |this| { this.lower_fn_decl(&sig.decl, Some(id), kind, is_async) }); (generics, hir::FnSig { header, decl, span: self.lower_span(sig.span) }) diff --git a/compiler/rustc_ast_lowering/src/lib.rs b/compiler/rustc_ast_lowering/src/lib.rs index 872c9f53fc0..2752a201ab9 100644 --- a/compiler/rustc_ast_lowering/src/lib.rs +++ b/compiler/rustc_ast_lowering/src/lib.rs @@ -710,10 +710,18 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { &mut self, generics: &Generics, parent_node_id: NodeId, + itctx: ImplTraitContext, f: impl FnOnce(&mut Self) -> T, ) -> (&'hir hir::Generics<'hir>, T) { - let mut lowered_generics = self - .lower_generics_mut(generics, ImplTraitContext::Universal(self.current_hir_id_owner)); + match itctx { + ImplTraitContext::Universal(..) => {} + _ => { + debug_assert!(self.impl_trait_defs.is_empty()); + debug_assert!(self.impl_trait_bounds.is_empty()); + } + } + + let mut lowered_generics = self.lower_generics_mut(generics, itctx); let res = f(self); let extra_lifetimes = self.resolver.take_extra_lifetime_params(parent_node_id);