about summary refs log tree commit diff
path: root/compiler/rustc_ast_lowering/src
diff options
context:
space:
mode:
authorFrank King <frankking1729@gmail.com>2024-01-04 21:45:06 +0800
committerFrank King <frankking1729@gmail.com>2024-02-12 12:47:30 +0800
commit0c0df4efe09072013067fc5829996cc53f5c9bd3 (patch)
tree662290bc01a3f85b301b0c2d665f3d60660e3abf /compiler/rustc_ast_lowering/src
parent36d7e7fd3fee2a2e3e19f103d9595329093ab68e (diff)
downloadrust-0c0df4efe09072013067fc5829996cc53f5c9bd3.tar.gz
rust-0c0df4efe09072013067fc5829996cc53f5c9bd3.zip
Lowering field access for anonymous adts
Diffstat (limited to 'compiler/rustc_ast_lowering/src')
-rw-r--r--compiler/rustc_ast_lowering/src/lib.rs27
1 files changed, 11 insertions, 16 deletions
diff --git a/compiler/rustc_ast_lowering/src/lib.rs b/compiler/rustc_ast_lowering/src/lib.rs
index 7a071242256..480072ce705 100644
--- a/compiler/rustc_ast_lowering/src/lib.rs
+++ b/compiler/rustc_ast_lowering/src/lib.rs
@@ -1299,33 +1299,28 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
             // //  ^_____________________|
             // }
             // ```
-            TyKind::AnonStruct(def_node_id, fields) | TyKind::AnonUnion(def_node_id, fields) => {
-                let (def_kind, item_kind): (DefKind, fn(_, _) -> _) = match t.kind {
-                    TyKind::AnonStruct(..) => (DefKind::Struct, hir::ItemKind::Struct),
-                    TyKind::AnonUnion(..) => (DefKind::Union, hir::ItemKind::Union),
-                    _ => unreachable!(),
-                };
-                let def_id = self.create_def(
-                    self.current_hir_id_owner.def_id,
-                    *def_node_id,
-                    kw::Empty,
-                    def_kind,
-                    t.span,
-                );
+            TyKind::AnonStruct(node_id, fields) | TyKind::AnonUnion(node_id, fields) => {
+                // Here its `def_id` is created in `build_reduced_graph`.
+                let def_id = self.local_def_id(*node_id);
                 debug!(?def_id);
                 let owner_id = hir::OwnerId { def_id };
-                self.with_hir_id_owner(*def_node_id, |this| {
+                self.with_hir_id_owner(*node_id, |this| {
                     let fields = this.arena.alloc_from_iter(
                         fields.iter().enumerate().map(|f| this.lower_field_def(f)),
                     );
                     let span = t.span;
-                    let variant_data = hir::VariantData::Struct(fields, false);
+                    let variant_data = hir::VariantData::Struct { fields, recovered: false };
                     // FIXME: capture the generics from the outer adt.
                     let generics = hir::Generics::empty();
+                    let kind = match t.kind {
+                        TyKind::AnonStruct(..) => hir::ItemKind::Struct(variant_data, generics),
+                        TyKind::AnonUnion(..) => hir::ItemKind::Union(variant_data, generics),
+                        _ => unreachable!(),
+                    };
                     hir::OwnerNode::Item(this.arena.alloc(hir::Item {
                         ident: Ident::new(kw::Empty, span),
                         owner_id,
-                        kind: item_kind(variant_data, generics),
+                        kind,
                         span: this.lower_span(span),
                         vis_span: this.lower_span(span.shrink_to_lo()),
                     }))