Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit 636fd49

Browse files
committed
rustc_middle: Add a method for getting a SimplifiedType definition/ID
Import `SimplifiedType` more
1 parent f1ce0e6 commit 636fd49

File tree

7 files changed

+24
-12
lines changed

7 files changed

+24
-12
lines changed

compiler/rustc_metadata/src/rmeta/decoder.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ use rustc_middle::mir::interpret::{AllocDecodingSession, AllocDecodingState};
2727
use rustc_middle::mir::{self, Body, Promoted};
2828
use rustc_middle::thir;
2929
use rustc_middle::ty::codec::TyDecoder;
30+
use rustc_middle::ty::fast_reject::SimplifiedType;
3031
use rustc_middle::ty::{self, Ty, TyCtxt, Visibility};
3132
use rustc_serialize::{opaque, Decodable, Decoder};
3233
use rustc_session::cstore::{
@@ -92,8 +93,7 @@ crate struct CrateMetadata {
9293
/// Trait impl data.
9394
/// FIXME: Used only from queries and can use query cache,
9495
/// so pre-decoding can probably be avoided.
95-
trait_impls:
96-
FxHashMap<(u32, DefIndex), Lazy<[(DefIndex, Option<ty::fast_reject::SimplifiedType>)]>>,
96+
trait_impls: FxHashMap<(u32, DefIndex), Lazy<[(DefIndex, Option<SimplifiedType>)]>>,
9797
/// Proc macro descriptions for this crate, if it's a proc macro crate.
9898
raw_proc_macros: Option<&'static [ProcMacro]>,
9999
/// Source maps for code from the crate.
@@ -1376,7 +1376,7 @@ impl<'a, 'tcx> CrateMetadataRef<'a> {
13761376
&self,
13771377
tcx: TyCtxt<'tcx>,
13781378
filter: Option<DefId>,
1379-
) -> &'tcx [(DefId, Option<ty::fast_reject::SimplifiedType>)] {
1379+
) -> &'tcx [(DefId, Option<SimplifiedType>)] {
13801380
if self.root.is_proc_macro_crate() {
13811381
// proc-macro crates export no trait impls.
13821382
return &[];

compiler/rustc_metadata/src/rmeta/encoder.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use rustc_middle::mir::interpret;
2626
use rustc_middle::thir;
2727
use rustc_middle::traits::specialization_graph;
2828
use rustc_middle::ty::codec::TyEncoder;
29-
use rustc_middle::ty::fast_reject::{self, SimplifyParams, StripReferences};
29+
use rustc_middle::ty::fast_reject::{self, SimplifiedType, SimplifyParams, StripReferences};
3030
use rustc_middle::ty::query::Providers;
3131
use rustc_middle::ty::{self, SymbolName, Ty, TyCtxt};
3232
use rustc_serialize::{opaque, Encodable, Encoder};
@@ -2055,7 +2055,7 @@ impl<'a, 'tcx> EncodeContext<'a, 'tcx> {
20552055

20562056
struct ImplsVisitor<'tcx> {
20572057
tcx: TyCtxt<'tcx>,
2058-
impls: FxHashMap<DefId, Vec<(DefIndex, Option<fast_reject::SimplifiedType>)>>,
2058+
impls: FxHashMap<DefId, Vec<(DefIndex, Option<SimplifiedType>)>>,
20592059
}
20602060

20612061
impl<'tcx, 'v> ItemLikeVisitor<'v> for ImplsVisitor<'tcx> {

compiler/rustc_metadata/src/rmeta/mod.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use rustc_middle::hir::exports::Export;
1616
use rustc_middle::middle::exported_symbols::{ExportedSymbol, SymbolExportLevel};
1717
use rustc_middle::mir;
1818
use rustc_middle::thir;
19+
use rustc_middle::ty::fast_reject::SimplifiedType;
1920
use rustc_middle::ty::query::Providers;
2021
use rustc_middle::ty::{self, ReprOptions, Ty};
2122
use rustc_serialize::opaque::Encoder;
@@ -261,7 +262,7 @@ crate struct CrateDep {
261262
#[derive(MetadataEncodable, MetadataDecodable)]
262263
crate struct TraitImpls {
263264
trait_id: (u32, DefIndex),
264-
impls: Lazy<[(DefIndex, Option<ty::fast_reject::SimplifiedType>)]>,
265+
impls: Lazy<[(DefIndex, Option<SimplifiedType>)]>,
265266
}
266267

267268
/// Define `LazyTables` and `TableBuilders` at the same time.

compiler/rustc_middle/src/query/mod.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1411,16 +1411,14 @@ rustc_queries! {
14111411

14121412
/// Given a crate and a trait, look up all impls of that trait in the crate.
14131413
/// Return `(impl_id, self_ty)`.
1414-
query implementations_of_trait(_: (CrateNum, DefId))
1415-
-> &'tcx [(DefId, Option<ty::fast_reject::SimplifiedType>)] {
1414+
query implementations_of_trait(_: (CrateNum, DefId)) -> &'tcx [(DefId, Option<SimplifiedType>)] {
14161415
desc { "looking up implementations of a trait in a crate" }
14171416
separate_provide_extern
14181417
}
14191418

14201419
/// Given a crate, look up all trait impls in that crate.
14211420
/// Return `(impl_id, self_ty)`.
1422-
query all_trait_implementations(_: CrateNum)
1423-
-> &'tcx [(DefId, Option<ty::fast_reject::SimplifiedType>)] {
1421+
query all_trait_implementations(_: CrateNum) -> &'tcx [(DefId, Option<SimplifiedType>)] {
14241422
desc { "looking up all (?) trait implementations" }
14251423
separate_provide_extern
14261424
}

compiler/rustc_middle/src/ty/fast_reject.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,18 @@ pub fn simplify_type(
143143
}
144144

145145
impl<D: Copy + Debug + Ord + Eq> SimplifiedTypeGen<D> {
146+
pub fn def(self) -> Option<D> {
147+
match self {
148+
AdtSimplifiedType(d)
149+
| ForeignSimplifiedType(d)
150+
| TraitSimplifiedType(d)
151+
| ClosureSimplifiedType(d)
152+
| GeneratorSimplifiedType(d)
153+
| OpaqueSimplifiedType(d) => Some(d),
154+
_ => None,
155+
}
156+
}
157+
146158
pub fn map_def<U, F>(self, map: F) -> SimplifiedTypeGen<U>
147159
where
148160
F: Fn(D) -> U,

compiler/rustc_middle/src/ty/query.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ use crate::traits::query::{
2828
};
2929
use crate::traits::specialization_graph;
3030
use crate::traits::{self, ImplSource};
31+
use crate::ty::fast_reject::SimplifiedType;
3132
use crate::ty::subst::{GenericArg, SubstsRef};
3233
use crate::ty::util::AlwaysRequiresDrop;
3334
use crate::ty::{self, AdtSizedConstraint, CrateInherentImpls, ParamEnvAnd, Ty, TyCtxt};

compiler/rustc_middle/src/ty/trait_def.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
use crate::traits::specialization_graph;
2-
use crate::ty::fast_reject::{self, SimplifyParams, StripReferences};
2+
use crate::ty::fast_reject::{self, SimplifiedType, SimplifyParams, StripReferences};
33
use crate::ty::fold::TypeFoldable;
44
use crate::ty::{Ty, TyCtxt};
55
use rustc_hir as hir;
@@ -68,7 +68,7 @@ pub enum TraitSpecializationKind {
6868
pub struct TraitImpls {
6969
blanket_impls: Vec<DefId>,
7070
/// Impls indexed by their simplified self type, for fast lookup.
71-
non_blanket_impls: FxIndexMap<fast_reject::SimplifiedType, Vec<DefId>>,
71+
non_blanket_impls: FxIndexMap<SimplifiedType, Vec<DefId>>,
7272
}
7373

7474
impl TraitImpls {

0 commit comments

Comments
 (0)