rustc_middle: Add a method for getting a SimplifiedType
definition/ID
Import `SimplifiedType` more
This commit is contained in:
parent
f1ce0e6a00
commit
636fd495c8
7 changed files with 24 additions and 12 deletions
|
@ -27,6 +27,7 @@ use rustc_middle::mir::interpret::{AllocDecodingSession, AllocDecodingState};
|
||||||
use rustc_middle::mir::{self, Body, Promoted};
|
use rustc_middle::mir::{self, Body, Promoted};
|
||||||
use rustc_middle::thir;
|
use rustc_middle::thir;
|
||||||
use rustc_middle::ty::codec::TyDecoder;
|
use rustc_middle::ty::codec::TyDecoder;
|
||||||
|
use rustc_middle::ty::fast_reject::SimplifiedType;
|
||||||
use rustc_middle::ty::{self, Ty, TyCtxt, Visibility};
|
use rustc_middle::ty::{self, Ty, TyCtxt, Visibility};
|
||||||
use rustc_serialize::{opaque, Decodable, Decoder};
|
use rustc_serialize::{opaque, Decodable, Decoder};
|
||||||
use rustc_session::cstore::{
|
use rustc_session::cstore::{
|
||||||
|
@ -92,8 +93,7 @@ crate struct CrateMetadata {
|
||||||
/// Trait impl data.
|
/// Trait impl data.
|
||||||
/// FIXME: Used only from queries and can use query cache,
|
/// FIXME: Used only from queries and can use query cache,
|
||||||
/// so pre-decoding can probably be avoided.
|
/// so pre-decoding can probably be avoided.
|
||||||
trait_impls:
|
trait_impls: FxHashMap<(u32, DefIndex), Lazy<[(DefIndex, Option<SimplifiedType>)]>>,
|
||||||
FxHashMap<(u32, DefIndex), Lazy<[(DefIndex, Option<ty::fast_reject::SimplifiedType>)]>>,
|
|
||||||
/// Proc macro descriptions for this crate, if it's a proc macro crate.
|
/// Proc macro descriptions for this crate, if it's a proc macro crate.
|
||||||
raw_proc_macros: Option<&'static [ProcMacro]>,
|
raw_proc_macros: Option<&'static [ProcMacro]>,
|
||||||
/// Source maps for code from the crate.
|
/// Source maps for code from the crate.
|
||||||
|
@ -1376,7 +1376,7 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
|
||||||
&self,
|
&self,
|
||||||
tcx: TyCtxt<'tcx>,
|
tcx: TyCtxt<'tcx>,
|
||||||
filter: Option<DefId>,
|
filter: Option<DefId>,
|
||||||
) -> &'tcx [(DefId, Option<ty::fast_reject::SimplifiedType>)] {
|
) -> &'tcx [(DefId, Option<SimplifiedType>)] {
|
||||||
if self.root.is_proc_macro_crate() {
|
if self.root.is_proc_macro_crate() {
|
||||||
// proc-macro crates export no trait impls.
|
// proc-macro crates export no trait impls.
|
||||||
return &[];
|
return &[];
|
||||||
|
|
|
@ -26,7 +26,7 @@ use rustc_middle::mir::interpret;
|
||||||
use rustc_middle::thir;
|
use rustc_middle::thir;
|
||||||
use rustc_middle::traits::specialization_graph;
|
use rustc_middle::traits::specialization_graph;
|
||||||
use rustc_middle::ty::codec::TyEncoder;
|
use rustc_middle::ty::codec::TyEncoder;
|
||||||
use rustc_middle::ty::fast_reject::{self, SimplifyParams, StripReferences};
|
use rustc_middle::ty::fast_reject::{self, SimplifiedType, SimplifyParams, StripReferences};
|
||||||
use rustc_middle::ty::query::Providers;
|
use rustc_middle::ty::query::Providers;
|
||||||
use rustc_middle::ty::{self, SymbolName, Ty, TyCtxt};
|
use rustc_middle::ty::{self, SymbolName, Ty, TyCtxt};
|
||||||
use rustc_serialize::{opaque, Encodable, Encoder};
|
use rustc_serialize::{opaque, Encodable, Encoder};
|
||||||
|
@ -2055,7 +2055,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
|
||||||
|
|
||||||
struct ImplsVisitor<'tcx> {
|
struct ImplsVisitor<'tcx> {
|
||||||
tcx: TyCtxt<'tcx>,
|
tcx: TyCtxt<'tcx>,
|
||||||
impls: FxHashMap<DefId, Vec<(DefIndex, Option<fast_reject::SimplifiedType>)>>,
|
impls: FxHashMap<DefId, Vec<(DefIndex, Option<SimplifiedType>)>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx, 'v> ItemLikeVisitor<'v> for ImplsVisitor<'tcx> {
|
impl<'tcx, 'v> ItemLikeVisitor<'v> for ImplsVisitor<'tcx> {
|
||||||
|
|
|
@ -16,6 +16,7 @@ use rustc_middle::hir::exports::Export;
|
||||||
use rustc_middle::middle::exported_symbols::{ExportedSymbol, SymbolExportLevel};
|
use rustc_middle::middle::exported_symbols::{ExportedSymbol, SymbolExportLevel};
|
||||||
use rustc_middle::mir;
|
use rustc_middle::mir;
|
||||||
use rustc_middle::thir;
|
use rustc_middle::thir;
|
||||||
|
use rustc_middle::ty::fast_reject::SimplifiedType;
|
||||||
use rustc_middle::ty::query::Providers;
|
use rustc_middle::ty::query::Providers;
|
||||||
use rustc_middle::ty::{self, ReprOptions, Ty};
|
use rustc_middle::ty::{self, ReprOptions, Ty};
|
||||||
use rustc_serialize::opaque::Encoder;
|
use rustc_serialize::opaque::Encoder;
|
||||||
|
@ -261,7 +262,7 @@ crate struct CrateDep {
|
||||||
#[derive(MetadataEncodable, MetadataDecodable)]
|
#[derive(MetadataEncodable, MetadataDecodable)]
|
||||||
crate struct TraitImpls {
|
crate struct TraitImpls {
|
||||||
trait_id: (u32, DefIndex),
|
trait_id: (u32, DefIndex),
|
||||||
impls: Lazy<[(DefIndex, Option<ty::fast_reject::SimplifiedType>)]>,
|
impls: Lazy<[(DefIndex, Option<SimplifiedType>)]>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Define `LazyTables` and `TableBuilders` at the same time.
|
/// Define `LazyTables` and `TableBuilders` at the same time.
|
||||||
|
|
|
@ -1411,16 +1411,14 @@ rustc_queries! {
|
||||||
|
|
||||||
/// Given a crate and a trait, look up all impls of that trait in the crate.
|
/// Given a crate and a trait, look up all impls of that trait in the crate.
|
||||||
/// Return `(impl_id, self_ty)`.
|
/// Return `(impl_id, self_ty)`.
|
||||||
query implementations_of_trait(_: (CrateNum, DefId))
|
query implementations_of_trait(_: (CrateNum, DefId)) -> &'tcx [(DefId, Option<SimplifiedType>)] {
|
||||||
-> &'tcx [(DefId, Option<ty::fast_reject::SimplifiedType>)] {
|
|
||||||
desc { "looking up implementations of a trait in a crate" }
|
desc { "looking up implementations of a trait in a crate" }
|
||||||
separate_provide_extern
|
separate_provide_extern
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Given a crate, look up all trait impls in that crate.
|
/// Given a crate, look up all trait impls in that crate.
|
||||||
/// Return `(impl_id, self_ty)`.
|
/// Return `(impl_id, self_ty)`.
|
||||||
query all_trait_implementations(_: CrateNum)
|
query all_trait_implementations(_: CrateNum) -> &'tcx [(DefId, Option<SimplifiedType>)] {
|
||||||
-> &'tcx [(DefId, Option<ty::fast_reject::SimplifiedType>)] {
|
|
||||||
desc { "looking up all (?) trait implementations" }
|
desc { "looking up all (?) trait implementations" }
|
||||||
separate_provide_extern
|
separate_provide_extern
|
||||||
}
|
}
|
||||||
|
|
|
@ -143,6 +143,18 @@ pub fn simplify_type(
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<D: Copy + Debug + Ord + Eq> SimplifiedTypeGen<D> {
|
impl<D: Copy + Debug + Ord + Eq> SimplifiedTypeGen<D> {
|
||||||
|
pub fn def(self) -> Option<D> {
|
||||||
|
match self {
|
||||||
|
AdtSimplifiedType(d)
|
||||||
|
| ForeignSimplifiedType(d)
|
||||||
|
| TraitSimplifiedType(d)
|
||||||
|
| ClosureSimplifiedType(d)
|
||||||
|
| GeneratorSimplifiedType(d)
|
||||||
|
| OpaqueSimplifiedType(d) => Some(d),
|
||||||
|
_ => None,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub fn map_def<U, F>(self, map: F) -> SimplifiedTypeGen<U>
|
pub fn map_def<U, F>(self, map: F) -> SimplifiedTypeGen<U>
|
||||||
where
|
where
|
||||||
F: Fn(D) -> U,
|
F: Fn(D) -> U,
|
||||||
|
|
|
@ -28,6 +28,7 @@ use crate::traits::query::{
|
||||||
};
|
};
|
||||||
use crate::traits::specialization_graph;
|
use crate::traits::specialization_graph;
|
||||||
use crate::traits::{self, ImplSource};
|
use crate::traits::{self, ImplSource};
|
||||||
|
use crate::ty::fast_reject::SimplifiedType;
|
||||||
use crate::ty::subst::{GenericArg, SubstsRef};
|
use crate::ty::subst::{GenericArg, SubstsRef};
|
||||||
use crate::ty::util::AlwaysRequiresDrop;
|
use crate::ty::util::AlwaysRequiresDrop;
|
||||||
use crate::ty::{self, AdtSizedConstraint, CrateInherentImpls, ParamEnvAnd, Ty, TyCtxt};
|
use crate::ty::{self, AdtSizedConstraint, CrateInherentImpls, ParamEnvAnd, Ty, TyCtxt};
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
use crate::traits::specialization_graph;
|
use crate::traits::specialization_graph;
|
||||||
use crate::ty::fast_reject::{self, SimplifyParams, StripReferences};
|
use crate::ty::fast_reject::{self, SimplifiedType, SimplifyParams, StripReferences};
|
||||||
use crate::ty::fold::TypeFoldable;
|
use crate::ty::fold::TypeFoldable;
|
||||||
use crate::ty::{Ty, TyCtxt};
|
use crate::ty::{Ty, TyCtxt};
|
||||||
use rustc_hir as hir;
|
use rustc_hir as hir;
|
||||||
|
@ -68,7 +68,7 @@ pub enum TraitSpecializationKind {
|
||||||
pub struct TraitImpls {
|
pub struct TraitImpls {
|
||||||
blanket_impls: Vec<DefId>,
|
blanket_impls: Vec<DefId>,
|
||||||
/// Impls indexed by their simplified self type, for fast lookup.
|
/// Impls indexed by their simplified self type, for fast lookup.
|
||||||
non_blanket_impls: FxIndexMap<fast_reject::SimplifiedType, Vec<DefId>>,
|
non_blanket_impls: FxIndexMap<SimplifiedType, Vec<DefId>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl TraitImpls {
|
impl TraitImpls {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue