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::thir;
|
||||
use rustc_middle::ty::codec::TyDecoder;
|
||||
use rustc_middle::ty::fast_reject::SimplifiedType;
|
||||
use rustc_middle::ty::{self, Ty, TyCtxt, Visibility};
|
||||
use rustc_serialize::{opaque, Decodable, Decoder};
|
||||
use rustc_session::cstore::{
|
||||
|
@ -92,8 +93,7 @@ crate struct CrateMetadata {
|
|||
/// Trait impl data.
|
||||
/// FIXME: Used only from queries and can use query cache,
|
||||
/// so pre-decoding can probably be avoided.
|
||||
trait_impls:
|
||||
FxHashMap<(u32, DefIndex), Lazy<[(DefIndex, Option<ty::fast_reject::SimplifiedType>)]>>,
|
||||
trait_impls: FxHashMap<(u32, DefIndex), Lazy<[(DefIndex, Option<SimplifiedType>)]>>,
|
||||
/// Proc macro descriptions for this crate, if it's a proc macro crate.
|
||||
raw_proc_macros: Option<&'static [ProcMacro]>,
|
||||
/// Source maps for code from the crate.
|
||||
|
@ -1376,7 +1376,7 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
|
|||
&self,
|
||||
tcx: TyCtxt<'tcx>,
|
||||
filter: Option<DefId>,
|
||||
) -> &'tcx [(DefId, Option<ty::fast_reject::SimplifiedType>)] {
|
||||
) -> &'tcx [(DefId, Option<SimplifiedType>)] {
|
||||
if self.root.is_proc_macro_crate() {
|
||||
// proc-macro crates export no trait impls.
|
||||
return &[];
|
||||
|
|
|
@ -26,7 +26,7 @@ use rustc_middle::mir::interpret;
|
|||
use rustc_middle::thir;
|
||||
use rustc_middle::traits::specialization_graph;
|
||||
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::{self, SymbolName, Ty, TyCtxt};
|
||||
use rustc_serialize::{opaque, Encodable, Encoder};
|
||||
|
@ -2055,7 +2055,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
|
|||
|
||||
struct ImplsVisitor<'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> {
|
||||
|
|
|
@ -16,6 +16,7 @@ use rustc_middle::hir::exports::Export;
|
|||
use rustc_middle::middle::exported_symbols::{ExportedSymbol, SymbolExportLevel};
|
||||
use rustc_middle::mir;
|
||||
use rustc_middle::thir;
|
||||
use rustc_middle::ty::fast_reject::SimplifiedType;
|
||||
use rustc_middle::ty::query::Providers;
|
||||
use rustc_middle::ty::{self, ReprOptions, Ty};
|
||||
use rustc_serialize::opaque::Encoder;
|
||||
|
@ -261,7 +262,7 @@ crate struct CrateDep {
|
|||
#[derive(MetadataEncodable, MetadataDecodable)]
|
||||
crate struct TraitImpls {
|
||||
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.
|
||||
|
|
|
@ -1411,16 +1411,14 @@ rustc_queries! {
|
|||
|
||||
/// Given a crate and a trait, look up all impls of that trait in the crate.
|
||||
/// Return `(impl_id, self_ty)`.
|
||||
query implementations_of_trait(_: (CrateNum, DefId))
|
||||
-> &'tcx [(DefId, Option<ty::fast_reject::SimplifiedType>)] {
|
||||
query implementations_of_trait(_: (CrateNum, DefId)) -> &'tcx [(DefId, Option<SimplifiedType>)] {
|
||||
desc { "looking up implementations of a trait in a crate" }
|
||||
separate_provide_extern
|
||||
}
|
||||
|
||||
/// Given a crate, look up all trait impls in that crate.
|
||||
/// Return `(impl_id, self_ty)`.
|
||||
query all_trait_implementations(_: CrateNum)
|
||||
-> &'tcx [(DefId, Option<ty::fast_reject::SimplifiedType>)] {
|
||||
query all_trait_implementations(_: CrateNum) -> &'tcx [(DefId, Option<SimplifiedType>)] {
|
||||
desc { "looking up all (?) trait implementations" }
|
||||
separate_provide_extern
|
||||
}
|
||||
|
|
|
@ -143,6 +143,18 @@ pub fn simplify_type(
|
|||
}
|
||||
|
||||
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>
|
||||
where
|
||||
F: Fn(D) -> U,
|
||||
|
|
|
@ -28,6 +28,7 @@ use crate::traits::query::{
|
|||
};
|
||||
use crate::traits::specialization_graph;
|
||||
use crate::traits::{self, ImplSource};
|
||||
use crate::ty::fast_reject::SimplifiedType;
|
||||
use crate::ty::subst::{GenericArg, SubstsRef};
|
||||
use crate::ty::util::AlwaysRequiresDrop;
|
||||
use crate::ty::{self, AdtSizedConstraint, CrateInherentImpls, ParamEnvAnd, Ty, TyCtxt};
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
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::{Ty, TyCtxt};
|
||||
use rustc_hir as hir;
|
||||
|
@ -68,7 +68,7 @@ pub enum TraitSpecializationKind {
|
|||
pub struct TraitImpls {
|
||||
blanket_impls: Vec<DefId>,
|
||||
/// 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 {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue