Skip to content

Commit

Permalink
Add mir_const_qualifs table.
Browse files Browse the repository at this point in the history
  • Loading branch information
cjgillot committed Feb 19, 2022
1 parent 0b7ee3a commit f8fd973
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 28 deletions.
24 changes: 4 additions & 20 deletions compiler/rustc_metadata/src/rmeta/decoder.rs
Expand Up @@ -24,7 +24,6 @@ use rustc_middle::arena::ArenaAllocatable;
use rustc_middle::metadata::ModChild;
use rustc_middle::middle::exported_symbols::{ExportedSymbol, SymbolExportLevel};
use rustc_middle::middle::stability::DeprecationEntry;
use rustc_middle::mir;
use rustc_middle::mir::interpret::{AllocDecodingSession, AllocDecodingState};
use rustc_middle::thir;
use rustc_middle::ty::codec::TyDecoder;
Expand Down Expand Up @@ -1171,21 +1170,6 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
}
}

fn mir_const_qualif(self, id: DefIndex) -> mir::ConstQualifs {
match self.kind(id) {
EntryKind::AnonConst(qualif, _)
| EntryKind::Const(qualif, _)
| EntryKind::AssocConst(
AssocContainer::ImplDefault
| AssocContainer::ImplFinal
| AssocContainer::TraitWithDefault,
qualif,
_,
) => qualif,
_ => bug!("mir_const_qualif: unexpected kind"),
}
}

fn get_fn_has_self_parameter(self, id: DefIndex) -> bool {
match self.kind(id) {
EntryKind::AssocFn(data) => data.decode(self).has_self,
Expand All @@ -1209,7 +1193,7 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
let name = self.item_name(id);

let (kind, container, has_self) = match self.kind(id) {
EntryKind::AssocConst(container, _, _) => (ty::AssocKind::Const, container, false),
EntryKind::AssocConst(container, _) => (ty::AssocKind::Const, container, false),
EntryKind::AssocFn(data) => {
let data = data.decode(self);
(ty::AssocKind::Fn, data.container, data.has_self)
Expand Down Expand Up @@ -1429,9 +1413,9 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {

fn get_rendered_const(self, id: DefIndex) -> String {
match self.kind(id) {
EntryKind::AnonConst(_, data)
| EntryKind::Const(_, data)
| EntryKind::AssocConst(_, _, data) => data.decode(self).0,
EntryKind::AnonConst(data)
| EntryKind::Const(data)
| EntryKind::AssocConst(_, data) => data.decode(self).0,
_ => bug!(),
}
}
Expand Down
2 changes: 1 addition & 1 deletion compiler/rustc_metadata/src/rmeta/decoder/cstore_impl.rs
Expand Up @@ -136,6 +136,7 @@ provide! { <'tcx> tcx, def_id, other, cdata,
impl_defaultness => { table }
impl_constness => { table }
coerce_unsized_info => { table }
mir_const_qualif => { table }

trait_def => { cdata.get_trait_def(def_id.index, tcx.sess) }
adt_def => { cdata.get_adt_def(def_id.index, tcx) }
Expand All @@ -145,7 +146,6 @@ provide! { <'tcx> tcx, def_id, other, cdata,
}
associated_item_def_ids => { cdata.get_associated_item_def_ids(tcx, def_id.index) }
associated_item => { cdata.get_associated_item(def_id.index) }
mir_const_qualif => { cdata.mir_const_qualif(def_id.index) }
inherent_impls => { cdata.get_inherent_implementations_for_type(tcx, def_id.index) }
is_const_fn_raw => { cdata.is_const_fn_raw(def_id.index) }
asyncness => { cdata.asyncness(def_id.index) }
Expand Down
10 changes: 6 additions & 4 deletions compiler/rustc_metadata/src/rmeta/encoder.rs
Expand Up @@ -1192,9 +1192,9 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {

record!(self.tables.kind[def_id] <- EntryKind::AssocConst(
container,
Default::default(),
rendered_const,
));
record!(self.tables.mir_const_qualif[def_id] <- mir::ConstQualifs::default());
}
ty::AssocKind::Fn => {
let fn_data = if let hir::TraitItemKind::Fn(m_sig, m) = &ast_item.kind {
Expand Down Expand Up @@ -1259,9 +1259,9 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {

record!(self.tables.kind[def_id] <- EntryKind::AssocConst(
container,
qualifs,
self.encode_rendered_const_for_body(body_id))
);
record!(self.tables.mir_const_qualif[def_id] <- qualifs);
} else {
bug!()
}
Expand Down Expand Up @@ -1407,7 +1407,8 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
hir::ItemKind::Static(_, hir::Mutability::Not, _) => EntryKind::ImmStatic,
hir::ItemKind::Const(_, body_id) => {
let qualifs = self.tcx.at(item.span).mir_const_qualif(def_id);
EntryKind::Const(qualifs, self.encode_rendered_const_for_body(body_id))
record!(self.tables.mir_const_qualif[def_id] <- qualifs);
EntryKind::Const(self.encode_rendered_const_for_body(body_id))
}
hir::ItemKind::Fn(ref sig, .., body) => {
let data = FnData {
Expand Down Expand Up @@ -1603,7 +1604,8 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
let const_data = self.encode_rendered_const_for_body(body_id);
let qualifs = self.tcx.mir_const_qualif(def_id);

record!(self.tables.kind[def_id.to_def_id()] <- EntryKind::AnonConst(qualifs, const_data));
record!(self.tables.kind[def_id.to_def_id()] <- EntryKind::AnonConst(const_data));
record!(self.tables.mir_const_qualif[def_id.to_def_id()] <- qualifs);
self.encode_item_type(def_id.to_def_id());
}

Expand Down
7 changes: 4 additions & 3 deletions compiler/rustc_metadata/src/rmeta/mod.rs
Expand Up @@ -308,6 +308,7 @@ define_tables! {
impl_defaultness: Table<DefIndex, Lazy!(hir::Defaultness)>,
// FIXME(eddyb) perhaps compute this on the fly if cheap enough?
coerce_unsized_info: Table<DefIndex, Lazy!(ty::adjustment::CoerceUnsizedInfo)>,
mir_const_qualif: Table<DefIndex, Lazy!(mir::ConstQualifs)>,

trait_item_def_id: Table<DefIndex, Lazy<DefId>>,
inherent_impls: Table<DefIndex, Lazy<[DefIndex]>>,
Expand All @@ -324,8 +325,8 @@ define_tables! {

#[derive(Copy, Clone, MetadataEncodable, MetadataDecodable)]
enum EntryKind {
AnonConst(mir::ConstQualifs, Lazy<RenderedConst>),
Const(mir::ConstQualifs, Lazy<RenderedConst>),
AnonConst(Lazy<RenderedConst>),
Const(Lazy<RenderedConst>),
ImmStatic,
MutStatic,
ForeignImmStatic,
Expand Down Expand Up @@ -353,7 +354,7 @@ enum EntryKind {
Impl,
AssocFn(Lazy<AssocFnData>),
AssocType(AssocContainer),
AssocConst(AssocContainer, mir::ConstQualifs, Lazy<RenderedConst>),
AssocConst(AssocContainer, Lazy<RenderedConst>),
TraitAlias,
}

Expand Down

0 comments on commit f8fd973

Please sign in to comment.