Directly encode DefKind in metadata.
This commit is contained in:
parent
2129866dc0
commit
72be5b81df
4 changed files with 64 additions and 14 deletions
|
@ -292,6 +292,12 @@ trait LazyQueryDecodable<'a, 'tcx, T> {
|
|||
) -> T;
|
||||
}
|
||||
|
||||
impl<'a, 'tcx, T> LazyQueryDecodable<'a, 'tcx, T> for T {
|
||||
fn decode_query(self, _: CrateMetadataRef<'a>, _: TyCtxt<'tcx>, _: impl FnOnce() -> !) -> T {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a, 'tcx, T> LazyQueryDecodable<'a, 'tcx, T> for Option<T> {
|
||||
fn decode_query(self, _: CrateMetadataRef<'a>, _: TyCtxt<'tcx>, err: impl FnOnce() -> !) -> T {
|
||||
if let Some(l) = self { l } else { err() }
|
||||
|
@ -862,16 +868,14 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
|
|||
}
|
||||
|
||||
fn def_kind(self, item_id: DefIndex) -> DefKind {
|
||||
self.root.tables.opt_def_kind.get(self, item_id).map(|k| k.decode(self)).unwrap_or_else(
|
||||
|| {
|
||||
bug!(
|
||||
"CrateMetadata::def_kind({:?}): id not found, in crate {:?} with number {}",
|
||||
item_id,
|
||||
self.root.name,
|
||||
self.cnum,
|
||||
)
|
||||
},
|
||||
)
|
||||
self.root.tables.opt_def_kind.get(self, item_id).unwrap_or_else(|| {
|
||||
bug!(
|
||||
"CrateMetadata::def_kind({:?}): id not found, in crate {:?} with number {}",
|
||||
item_id,
|
||||
self.root.name,
|
||||
self.cnum,
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
fn get_span(self, index: DefIndex, sess: &Session) -> Span {
|
||||
|
|
|
@ -988,7 +988,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
|
|||
let def_id = local_id.to_def_id();
|
||||
let def_kind = tcx.opt_def_kind(local_id);
|
||||
let Some(def_kind) = def_kind else { continue };
|
||||
record!(self.tables.opt_def_kind[def_id] <- def_kind);
|
||||
self.tables.opt_def_kind.set(def_id.index, def_kind);
|
||||
record!(self.tables.def_span[def_id] <- tcx.def_span(def_id));
|
||||
record!(self.tables.attributes[def_id] <- tcx.get_attrs(def_id));
|
||||
record!(self.tables.expn_that_defined[def_id] <- self.tcx.expn_that_defined(def_id));
|
||||
|
@ -1644,7 +1644,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
|
|||
self.tables.proc_macro_quoted_spans.set(i, span);
|
||||
}
|
||||
|
||||
record!(self.tables.opt_def_kind[LOCAL_CRATE.as_def_id()] <- DefKind::Mod);
|
||||
self.tables.opt_def_kind.set(LOCAL_CRATE.as_def_id().index, DefKind::Mod);
|
||||
record!(self.tables.def_span[LOCAL_CRATE.as_def_id()] <- tcx.def_span(LOCAL_CRATE.as_def_id()));
|
||||
record!(self.tables.attributes[LOCAL_CRATE.as_def_id()] <- tcx.get_attrs(LOCAL_CRATE.as_def_id()));
|
||||
record!(self.tables.visibility[LOCAL_CRATE.as_def_id()] <- tcx.visibility(LOCAL_CRATE.as_def_id()));
|
||||
|
@ -1685,7 +1685,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
|
|||
def_key.disambiguated_data.data = DefPathData::MacroNs(name);
|
||||
|
||||
let def_id = id.to_def_id();
|
||||
record!(self.tables.opt_def_kind[def_id] <- DefKind::Macro(macro_kind));
|
||||
self.tables.opt_def_kind.set(def_id.index, DefKind::Macro(macro_kind));
|
||||
record!(self.tables.kind[def_id] <- EntryKind::ProcMacro(macro_kind));
|
||||
record!(self.tables.attributes[def_id] <- attrs);
|
||||
record!(self.tables.def_keys[def_id] <- def_key);
|
||||
|
|
|
@ -286,7 +286,7 @@ define_tables! {
|
|||
attributes: Table<DefIndex, Lazy<[ast::Attribute]>>,
|
||||
children: Table<DefIndex, Lazy<[DefIndex]>>,
|
||||
|
||||
opt_def_kind: Table<DefIndex, Lazy<DefKind>>,
|
||||
opt_def_kind: Table<DefIndex, DefKind>,
|
||||
visibility: Table<DefIndex, Lazy<ty::Visibility>>,
|
||||
def_span: Table<DefIndex, Lazy<Span>>,
|
||||
def_ident_span: Table<DefIndex, Lazy<Span>>,
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
use crate::rmeta::*;
|
||||
|
||||
use rustc_hir::def::{CtorKind, CtorOf};
|
||||
use rustc_index::vec::Idx;
|
||||
use rustc_serialize::opaque::Encoder;
|
||||
use rustc_serialize::Encoder as _;
|
||||
use rustc_span::hygiene::MacroKind;
|
||||
use std::convert::TryInto;
|
||||
use std::marker::PhantomData;
|
||||
use std::num::NonZeroUsize;
|
||||
|
@ -105,6 +107,50 @@ macro_rules! fixed_size_enum {
|
|||
}
|
||||
}
|
||||
|
||||
fixed_size_enum! {
|
||||
DefKind {
|
||||
( Mod )
|
||||
( Struct )
|
||||
( Union )
|
||||
( Enum )
|
||||
( Variant )
|
||||
( Trait )
|
||||
( TyAlias )
|
||||
( ForeignTy )
|
||||
( TraitAlias )
|
||||
( AssocTy )
|
||||
( TyParam )
|
||||
( Fn )
|
||||
( Const )
|
||||
( ConstParam )
|
||||
( AssocFn )
|
||||
( AssocConst )
|
||||
( ExternCrate )
|
||||
( Use )
|
||||
( ForeignMod )
|
||||
( AnonConst )
|
||||
( InlineConst )
|
||||
( OpaqueTy )
|
||||
( Field )
|
||||
( LifetimeParam )
|
||||
( GlobalAsm )
|
||||
( Impl )
|
||||
( Closure )
|
||||
( Generator )
|
||||
( Static(ast::Mutability::Not) )
|
||||
( Static(ast::Mutability::Mut) )
|
||||
( Ctor(CtorOf::Struct, CtorKind::Fn) )
|
||||
( Ctor(CtorOf::Struct, CtorKind::Const) )
|
||||
( Ctor(CtorOf::Struct, CtorKind::Fictive) )
|
||||
( Ctor(CtorOf::Variant, CtorKind::Fn) )
|
||||
( Ctor(CtorOf::Variant, CtorKind::Const) )
|
||||
( Ctor(CtorOf::Variant, CtorKind::Fictive) )
|
||||
( Macro(MacroKind::Bang) )
|
||||
( Macro(MacroKind::Attr) )
|
||||
( Macro(MacroKind::Derive) )
|
||||
}
|
||||
}
|
||||
|
||||
fixed_size_enum! {
|
||||
ty::ImplPolarity {
|
||||
( Positive )
|
||||
|
|
Loading…
Add table
Reference in a new issue