about summary refs log tree commit diff
path: root/compiler/rustc_ast_lowering/src
diff options
context:
space:
mode:
authorSantiago Pastorino <spastorino@gmail.com>2022-05-31 14:54:30 -0300
committerSantiago Pastorino <spastorino@gmail.com>2022-05-31 14:55:49 -0300
commit190b4a71528a1eb83d43119db6877d7051cf8add (patch)
tree2872870fb8b999c1c027f36e51f2e96a785c6cf7 /compiler/rustc_ast_lowering/src
parent1a71103c93424da73d893d53dec2a30e3b2af2cd (diff)
downloadrust-190b4a71528a1eb83d43119db6877d7051cf8add.tar.gz
rust-190b4a71528a1eb83d43119db6877d7051cf8add.zip
Add itctx: ImplTraitContext arg to add_implicit_generics
Diffstat (limited to 'compiler/rustc_ast_lowering/src')
-rw-r--r--compiler/rustc_ast_lowering/src/item.rs19
-rw-r--r--compiler/rustc_ast_lowering/src/lib.rs12
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<NodeId>,
     ) -> (&'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);