about summary refs log tree commit diff
path: root/compiler/rustc_ast_lowering/src
diff options
context:
space:
mode:
authorCameron Steffen <cam.steffen94@gmail.com>2025-07-21 20:05:16 -0500
committerCameron Steffen <cam.steffen94@gmail.com>2025-08-11 17:05:36 -0500
commit5bc23ce25548d7f4a9f6ceaa48cc3d8fe7629f58 (patch)
tree014fb073862c20373460e0eaa6989eb50a70fabc /compiler/rustc_ast_lowering/src
parent3aa0ac0a8af32f2c5da106c5e89bd9712d5a9655 (diff)
downloadrust-5bc23ce25548d7f4a9f6ceaa48cc3d8fe7629f58.tar.gz
rust-5bc23ce25548d7f4a9f6ceaa48cc3d8fe7629f58.zip
Extract ast TraitImplHeader
Diffstat (limited to 'compiler/rustc_ast_lowering/src')
-rw-r--r--compiler/rustc_ast_lowering/src/item.rs45
1 files changed, 31 insertions, 14 deletions
diff --git a/compiler/rustc_ast_lowering/src/item.rs b/compiler/rustc_ast_lowering/src/item.rs
index ac6fac4c08e..231752700ba 100644
--- a/compiler/rustc_ast_lowering/src/item.rs
+++ b/compiler/rustc_ast_lowering/src/item.rs
@@ -340,13 +340,9 @@ impl<'hir> LoweringContext<'_, 'hir> {
                 );
                 hir::ItemKind::Union(ident, generics, vdata)
             }
-            ItemKind::Impl(box Impl {
-                safety,
-                polarity,
-                defaultness,
-                constness,
+            ItemKind::Impl(Impl {
                 generics: ast_generics,
-                of_trait: trait_ref,
+                of_trait,
                 self_ty: ty,
                 items: impl_items,
             }) => {
@@ -373,10 +369,10 @@ impl<'hir> LoweringContext<'_, 'hir> {
                             polarity: BoundPolarity::Positive,
                         };
 
-                        let trait_ref = trait_ref.as_ref().map(|trait_ref| {
+                        let trait_ref = of_trait.as_ref().map(|of_trait| {
                             this.lower_trait_ref(
                                 modifiers,
-                                trait_ref,
+                                &of_trait.trait_ref,
                                 ImplTraitContext::Disallowed(ImplTraitPosition::Trait),
                             )
                         });
@@ -396,14 +392,35 @@ impl<'hir> LoweringContext<'_, 'hir> {
                 // `defaultness.has_value()` is never called for an `impl`, always `true` in order
                 // to not cause an assertion failure inside the `lower_defaultness` function.
                 let has_val = true;
-                let (defaultness, defaultness_span) = self.lower_defaultness(*defaultness, has_val);
-                let polarity = match polarity {
-                    ImplPolarity::Positive => ImplPolarity::Positive,
-                    ImplPolarity::Negative(s) => ImplPolarity::Negative(self.lower_span(*s)),
+                let (constness, safety, polarity, defaultness, defaultness_span) = match *of_trait {
+                    Some(box TraitImplHeader {
+                        constness,
+                        safety,
+                        polarity,
+                        defaultness,
+                        trait_ref: _,
+                    }) => {
+                        let constness = self.lower_constness(constness);
+                        let safety = self.lower_safety(safety, hir::Safety::Safe);
+                        let polarity = match polarity {
+                            ImplPolarity::Positive => ImplPolarity::Positive,
+                            ImplPolarity::Negative(s) => ImplPolarity::Negative(self.lower_span(s)),
+                        };
+                        let (defaultness, defaultness_span) =
+                            self.lower_defaultness(defaultness, has_val);
+                        (constness, safety, polarity, defaultness, defaultness_span)
+                    }
+                    None => (
+                        hir::Constness::NotConst,
+                        hir::Safety::Safe,
+                        ImplPolarity::Positive,
+                        hir::Defaultness::Final,
+                        None,
+                    ),
                 };
                 hir::ItemKind::Impl(self.arena.alloc(hir::Impl {
-                    constness: self.lower_constness(*constness),
-                    safety: self.lower_safety(*safety, hir::Safety::Safe),
+                    constness,
+                    safety,
                     polarity,
                     defaultness,
                     defaultness_span,