Skip to content

Commit 927e58d

Browse files
committed
Move VariantData to a metadata table.
1 parent edd25c3 commit 927e58d

File tree

3 files changed

+25
-24
lines changed

3 files changed

+25
-24
lines changed

compiler/rustc_metadata/src/rmeta/decoder.rs

+9-14
Original file line numberDiff line numberDiff line change
@@ -858,20 +858,15 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
858858
}
859859

860860
fn get_variant(self, kind: &EntryKind, index: DefIndex, parent_did: DefId) -> ty::VariantDef {
861-
let data = match kind {
862-
EntryKind::Variant(data) | EntryKind::Struct(data) | EntryKind::Union(data) => {
863-
data.decode(self)
864-
}
865-
_ => bug!(),
866-
};
867-
868861
let adt_kind = match kind {
869-
EntryKind::Variant(_) => ty::AdtKind::Enum,
870-
EntryKind::Struct(..) => ty::AdtKind::Struct,
871-
EntryKind::Union(..) => ty::AdtKind::Union,
862+
EntryKind::Variant => ty::AdtKind::Enum,
863+
EntryKind::Struct => ty::AdtKind::Struct,
864+
EntryKind::Union => ty::AdtKind::Union,
872865
_ => bug!(),
873866
};
874867

868+
let data = self.root.tables.variant_data.get(self, index).unwrap().decode(self);
869+
875870
let variant_did =
876871
if adt_kind == ty::AdtKind::Enum { Some(self.local_def_id(index)) } else { None };
877872
let ctor_did = data.ctor.map(|index| self.local_def_id(index));
@@ -907,8 +902,8 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
907902

908903
let adt_kind = match kind {
909904
EntryKind::Enum => ty::AdtKind::Enum,
910-
EntryKind::Struct(_) => ty::AdtKind::Struct,
911-
EntryKind::Union(_) => ty::AdtKind::Union,
905+
EntryKind::Struct => ty::AdtKind::Struct,
906+
EntryKind::Union => ty::AdtKind::Union,
912907
_ => bug!("get_adt_def called on a non-ADT {:?}", did),
913908
};
914909
let repr = self.root.tables.repr_options.get(self, item_id).unwrap().decode(self);
@@ -1158,8 +1153,8 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
11581153

11591154
fn get_ctor_def_id_and_kind(self, node_id: DefIndex) -> Option<(DefId, CtorKind)> {
11601155
match self.kind(node_id) {
1161-
EntryKind::Struct(data) | EntryKind::Variant(data) => {
1162-
let vdata = data.decode(self);
1156+
EntryKind::Struct | EntryKind::Variant => {
1157+
let vdata = self.root.tables.variant_data.get(self, node_id).unwrap().decode(self);
11631158
vdata.ctor.map(|index| (self.local_def_id(index), vdata.ctor_kind))
11641159
}
11651160
_ => None,

compiler/rustc_metadata/src/rmeta/encoder.rs

+12-7
Original file line numberDiff line numberDiff line change
@@ -1206,7 +1206,8 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
12061206
is_non_exhaustive: variant.is_field_list_non_exhaustive(),
12071207
};
12081208

1209-
record!(self.tables.kind[def_id] <- EntryKind::Variant(self.lazy(data)));
1209+
record!(self.tables.variant_data[def_id] <- data);
1210+
record!(self.tables.kind[def_id] <- EntryKind::Variant);
12101211
self.tables.constness.set(def_id.index, hir::Constness::Const);
12111212
record_array!(self.tables.children[def_id] <- variant.fields.iter().map(|f| {
12121213
assert!(f.did.is_local());
@@ -1234,7 +1235,8 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
12341235
is_non_exhaustive: variant.is_field_list_non_exhaustive(),
12351236
};
12361237

1237-
record!(self.tables.kind[def_id] <- EntryKind::Variant(self.lazy(data)));
1238+
record!(self.tables.variant_data[def_id] <- data);
1239+
record!(self.tables.kind[def_id] <- EntryKind::Variant);
12381240
self.tables.constness.set(def_id.index, hir::Constness::Const);
12391241
if variant.ctor_kind == CtorKind::Fn {
12401242
record!(self.tables.fn_sig[def_id] <- tcx.fn_sig(def_id));
@@ -1301,8 +1303,9 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
13011303
};
13021304

13031305
record!(self.tables.repr_options[def_id] <- adt_def.repr());
1306+
record!(self.tables.variant_data[def_id] <- data);
1307+
record!(self.tables.kind[def_id] <- EntryKind::Struct);
13041308
self.tables.constness.set(def_id.index, hir::Constness::Const);
1305-
record!(self.tables.kind[def_id] <- EntryKind::Struct(self.lazy(data)));
13061309
if variant.ctor_kind == CtorKind::Fn {
13071310
record!(self.tables.fn_sig[def_id] <- tcx.fn_sig(def_id));
13081311
}
@@ -1541,24 +1544,26 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
15411544
.map(|ctor_hir_id| self.tcx.hir().local_def_id(ctor_hir_id).local_def_index);
15421545

15431546
let variant = adt_def.non_enum_variant();
1544-
EntryKind::Struct(self.lazy(VariantData {
1547+
record!(self.tables.variant_data[def_id] <- VariantData {
15451548
ctor_kind: variant.ctor_kind,
15461549
discr: variant.discr,
15471550
ctor,
15481551
is_non_exhaustive: variant.is_field_list_non_exhaustive(),
1549-
}))
1552+
});
1553+
EntryKind::Struct
15501554
}
15511555
hir::ItemKind::Union(..) => {
15521556
let adt_def = self.tcx.adt_def(def_id);
15531557
record!(self.tables.repr_options[def_id] <- adt_def.repr());
15541558

15551559
let variant = adt_def.non_enum_variant();
1556-
EntryKind::Union(self.lazy(VariantData {
1560+
record!(self.tables.variant_data[def_id] <- VariantData {
15571561
ctor_kind: variant.ctor_kind,
15581562
discr: variant.discr,
15591563
ctor: None,
15601564
is_non_exhaustive: variant.is_field_list_non_exhaustive(),
1561-
}))
1565+
});
1566+
EntryKind::Union
15621567
}
15631568
hir::ItemKind::Impl(hir::Impl { defaultness, constness, .. }) => {
15641569
self.tables.impl_defaultness.set(def_id.index, *defaultness);

compiler/rustc_metadata/src/rmeta/mod.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -393,6 +393,7 @@ define_tables! {
393393
proc_macro_quoted_spans: Table<usize, LazyValue<Span>>,
394394
generator_diagnostic_data: Table<DefIndex, LazyValue<GeneratorDiagnosticData<'static>>>,
395395
may_have_doc_links: Table<DefIndex, ()>,
396+
variant_data: Table<DefIndex, LazyValue<VariantData>>,
396397
}
397398

398399
#[derive(Copy, Clone, MetadataEncodable, MetadataDecodable)]
@@ -410,9 +411,9 @@ enum EntryKind {
410411
OpaqueTy,
411412
Enum,
412413
Field,
413-
Variant(LazyValue<VariantData>),
414-
Struct(LazyValue<VariantData>),
415-
Union(LazyValue<VariantData>),
414+
Variant,
415+
Struct,
416+
Union,
416417
Fn,
417418
ForeignFn,
418419
Mod(LazyArray<ModChild>),

0 commit comments

Comments
 (0)