1use std::hash::Hash;
2
3use rustc_data_structures::unord::UnordMap;
4use rustc_index::{Idx, IndexVec};
5use rustc_middle::ty::{Binder, EarlyBinder, GenericArg, Region, Ty};
6use rustc_serialize::Encodable;
7use rustc_span::Symbol;
8
9use crate::rmeta::encoder::EncodeContext;
10use crate::rmeta::{LazyArray, LazyValue, LocalDefId};
11
12pub(crate) trait ParameterizedOverTcx: 'static {
13 type Value<'tcx>;
14}
15
16impl<T: ParameterizedOverTcx> ParameterizedOverTcx for Option<T> {
17 type Value<'tcx> = Option<T::Value<'tcx>>;
18}
19
20impl<A: ParameterizedOverTcx, B: ParameterizedOverTcx> ParameterizedOverTcx for (A, B) {
21 type Value<'tcx> = (A::Value<'tcx>, B::Value<'tcx>);
22}
23
24impl<T: ParameterizedOverTcx> ParameterizedOverTcx for Vec<T> {
25 type Value<'tcx> = Vec<T::Value<'tcx>>;
26}
27
28impl<I: Idx + 'static, T: ParameterizedOverTcx> ParameterizedOverTcx for IndexVec<I, T> {
29 type Value<'tcx> = IndexVec<I, T::Value<'tcx>>;
30}
31
32impl<I: Hash + Eq + 'static, T: ParameterizedOverTcx> ParameterizedOverTcx for UnordMap<I, T> {
33 type Value<'tcx> = UnordMap<I, T::Value<'tcx>>;
34}
35
36impl<T: ParameterizedOverTcx> ParameterizedOverTcx for Binder<'static, T> {
37 type Value<'tcx> = Binder<'tcx, T::Value<'tcx>>;
38}
39
40impl<T: ParameterizedOverTcx> ParameterizedOverTcx for EarlyBinder<'static, T> {
41 type Value<'tcx> = EarlyBinder<'tcx, T::Value<'tcx>>;
42}
43
44impl<T: ParameterizedOverTcx> ParameterizedOverTcx for LazyValue<T> {
45 type Value<'tcx> = LazyValue<T::Value<'tcx>>;
46}
47
48impl<T: ParameterizedOverTcx> ParameterizedOverTcx for LazyArray<T> {
49 type Value<'tcx> = LazyArray<T::Value<'tcx>>;
50}
51
52impl ParameterizedOverTcx for Region<'static> {
53 type Value<'tcx> = Region<'tcx>;
54}
55
56impl ParameterizedOverTcx for GenericArg<'static> {
57 type Value<'tcx> = GenericArg<'tcx>;
58}
59
60macro_rules! trivially_parameterized_over_tcx {
61 ($($ty:ty),+ $(,)?) => {
62 $(
63 impl ParameterizedOverTcx for $ty {
64 #[allow(unused_lifetimes)]
65 type Value<'tcx> = $ty;
66 }
67 )*
68 }
69}
70
71impl ParameterizedOverTcx for bool {
#[allow(unused_lifetimes)]
type Value<'tcx> = bool;
}
impl ParameterizedOverTcx for u32 {
#[allow(unused_lifetimes)]
type Value<'tcx> = u32;
}
impl ParameterizedOverTcx for u64 {
#[allow(unused_lifetimes)]
type Value<'tcx> = u64;
}
impl ParameterizedOverTcx for usize {
#[allow(unused_lifetimes)]
type Value<'tcx> = usize;
}
impl ParameterizedOverTcx for std::string::String {
#[allow(unused_lifetimes)]
type Value<'tcx> = std::string::String;
}
impl ParameterizedOverTcx for crate::rmeta::AttrFlags {
#[allow(unused_lifetimes)]
type Value<'tcx> = crate::rmeta::AttrFlags;
}
impl ParameterizedOverTcx for crate::rmeta::CrateDep {
#[allow(unused_lifetimes)]
type Value<'tcx> = crate::rmeta::CrateDep;
}
impl ParameterizedOverTcx for crate::rmeta::CrateHeader {
#[allow(unused_lifetimes)]
type Value<'tcx> = crate::rmeta::CrateHeader;
}
impl ParameterizedOverTcx for crate::rmeta::CrateRoot {
#[allow(unused_lifetimes)]
type Value<'tcx> = crate::rmeta::CrateRoot;
}
impl ParameterizedOverTcx for crate::rmeta::CrateRootUnhashed {
#[allow(unused_lifetimes)]
type Value<'tcx> = crate::rmeta::CrateRootUnhashed;
}
impl ParameterizedOverTcx for crate::rmeta::IncoherentImpls {
#[allow(unused_lifetimes)]
type Value<'tcx> = crate::rmeta::IncoherentImpls;
}
impl ParameterizedOverTcx for crate::rmeta::LocalDefId {
#[allow(unused_lifetimes)]
type Value<'tcx> = crate::rmeta::LocalDefId;
}
impl ParameterizedOverTcx for crate::rmeta::ProcMacroKind {
#[allow(unused_lifetimes)]
type Value<'tcx> = crate::rmeta::ProcMacroKind;
}
impl ParameterizedOverTcx for crate::rmeta::TraitImpls {
#[allow(unused_lifetimes)]
type Value<'tcx> = crate::rmeta::TraitImpls;
}
impl ParameterizedOverTcx for crate::rmeta::VariantData {
#[allow(unused_lifetimes)]
type Value<'tcx> = crate::rmeta::VariantData;
}
impl ParameterizedOverTcx for crate::rmeta::remapped_def_id::RemappedRawDefId
{
#[allow(unused_lifetimes)]
type Value<'tcx> = crate::rmeta::remapped_def_id::RemappedRawDefId;
}
impl ParameterizedOverTcx for rustc_abi::ReprOptions {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_abi::ReprOptions;
}
impl ParameterizedOverTcx for rustc_ast::DelimArgs {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_ast::DelimArgs;
}
impl ParameterizedOverTcx for rustc_attr_ir::Attribute {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_attr_ir::Attribute;
}
impl ParameterizedOverTcx for rustc_attr_ir::ConstStability {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_attr_ir::ConstStability;
}
impl ParameterizedOverTcx for rustc_attr_ir::DefaultBodyStability {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_attr_ir::DefaultBodyStability;
}
impl ParameterizedOverTcx for rustc_attr_ir::Deprecation {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_attr_ir::Deprecation;
}
impl ParameterizedOverTcx for rustc_attr_ir::EiiDecl {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_attr_ir::EiiDecl;
}
impl ParameterizedOverTcx for rustc_attr_ir::EiiImpl {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_attr_ir::EiiImpl;
}
impl ParameterizedOverTcx for rustc_attr_ir::Stability {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_attr_ir::Stability;
}
impl ParameterizedOverTcx for rustc_attr_ir::StrippedCfgItem<LocalDefId> {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_attr_ir::StrippedCfgItem<LocalDefId>;
}
impl ParameterizedOverTcx for rustc_attr_ir::lang_items::LangItem {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_attr_ir::lang_items::LangItem;
}
impl ParameterizedOverTcx for rustc_crate_store::ForeignModule {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_crate_store::ForeignModule;
}
impl ParameterizedOverTcx for rustc_crate_store::LinkagePreference {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_crate_store::LinkagePreference;
}
impl ParameterizedOverTcx for rustc_crate_store::NativeLib {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_crate_store::NativeLib;
}
impl ParameterizedOverTcx for rustc_hir::Constness {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_hir::Constness;
}
impl ParameterizedOverTcx for rustc_hir::CoroutineKind {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_hir::CoroutineKind;
}
impl ParameterizedOverTcx for rustc_hir::Defaultness {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_hir::Defaultness;
}
impl ParameterizedOverTcx for
rustc_hir::OpaqueTyOrigin<rustc_hir::def_id::DefId> {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_hir::OpaqueTyOrigin<rustc_hir::def_id::DefId>;
}
impl ParameterizedOverTcx for
rustc_hir::PreciseCapturingArgKind<Symbol, Symbol> {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_hir::PreciseCapturingArgKind<Symbol, Symbol>;
}
impl ParameterizedOverTcx for rustc_hir::Safety {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_hir::Safety;
}
impl ParameterizedOverTcx for rustc_hir::def::DefKind {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_hir::def::DefKind;
}
impl ParameterizedOverTcx for rustc_hir::def_id::DefId {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_hir::def_id::DefId;
}
impl ParameterizedOverTcx for rustc_hir::def_id::DefIndex {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_hir::def_id::DefIndex;
}
impl ParameterizedOverTcx for rustc_hir::definitions::DefKey {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_hir::definitions::DefKey;
}
impl ParameterizedOverTcx for rustc_index::bit_set::DenseBitSet<u32> {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_index::bit_set::DenseBitSet<u32>;
}
impl ParameterizedOverTcx for
rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrs {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrs;
}
impl ParameterizedOverTcx for
rustc_middle::middle::debugger_visualizer::DebuggerVisualizerFile {
#[allow(unused_lifetimes)]
type Value<'tcx> =
rustc_middle::middle::debugger_visualizer::DebuggerVisualizerFile;
}
impl ParameterizedOverTcx for
rustc_middle::middle::deduced_param_attrs::DeducedParamAttrs {
#[allow(unused_lifetimes)]
type Value<'tcx> =
rustc_middle::middle::deduced_param_attrs::DeducedParamAttrs;
}
impl ParameterizedOverTcx for
rustc_middle::middle::exported_symbols::SymbolExportInfo {
#[allow(unused_lifetimes)]
type Value<'tcx> =
rustc_middle::middle::exported_symbols::SymbolExportInfo;
}
impl ParameterizedOverTcx for
rustc_middle::middle::lib_features::FeatureStability {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_middle::middle::lib_features::FeatureStability;
}
impl ParameterizedOverTcx for rustc_middle::middle::resolve::AmbigModChild {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_middle::middle::resolve::AmbigModChild;
}
impl ParameterizedOverTcx for rustc_middle::middle::resolve::DocLinkResMap {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_middle::middle::resolve::DocLinkResMap;
}
impl ParameterizedOverTcx for rustc_middle::middle::resolve::ModChild {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_middle::middle::resolve::ModChild;
}
impl ParameterizedOverTcx for
rustc_middle::middle::resolve_bound_vars::ObjectLifetimeDefault {
#[allow(unused_lifetimes)]
type Value<'tcx> =
rustc_middle::middle::resolve_bound_vars::ObjectLifetimeDefault;
}
impl ParameterizedOverTcx for rustc_middle::mir::ConstQualifs {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_middle::mir::ConstQualifs;
}
impl ParameterizedOverTcx for rustc_middle::mir::ConstValue {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_middle::mir::ConstValue;
}
impl ParameterizedOverTcx for rustc_middle::ty::AnonConstKind {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_middle::ty::AnonConstKind;
}
impl ParameterizedOverTcx for rustc_middle::ty::AssocContainer {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_middle::ty::AssocContainer;
}
impl ParameterizedOverTcx for rustc_middle::ty::AsyncDestructor {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_middle::ty::AsyncDestructor;
}
impl ParameterizedOverTcx for rustc_middle::ty::Asyncness {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_middle::ty::Asyncness;
}
impl ParameterizedOverTcx for rustc_middle::ty::Destructor {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_middle::ty::Destructor;
}
impl ParameterizedOverTcx for rustc_middle::ty::Generics {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_middle::ty::Generics;
}
impl ParameterizedOverTcx for rustc_middle::ty::ImplTraitInTraitData {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_middle::ty::ImplTraitInTraitData;
}
impl ParameterizedOverTcx for rustc_middle::ty::IntrinsicDef {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_middle::ty::IntrinsicDef;
}
impl ParameterizedOverTcx for rustc_middle::ty::RestrictionKind {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_middle::ty::RestrictionKind;
}
impl ParameterizedOverTcx for rustc_middle::ty::TraitDef {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_middle::ty::TraitDef;
}
impl ParameterizedOverTcx for rustc_middle::ty::Variance {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_middle::ty::Variance;
}
impl ParameterizedOverTcx for rustc_middle::ty::Visibility<LocalDefId> {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_middle::ty::Visibility<LocalDefId>;
}
impl ParameterizedOverTcx for rustc_middle::ty::adjustment::CoerceUnsizedInfo
{
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_middle::ty::adjustment::CoerceUnsizedInfo;
}
impl ParameterizedOverTcx for rustc_middle::ty::fast_reject::SimplifiedType {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_middle::ty::fast_reject::SimplifiedType;
}
impl ParameterizedOverTcx for rustc_session::config::TargetModifier {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_session::config::TargetModifier;
}
impl ParameterizedOverTcx for
rustc_session::config::mitigation_coverage::DeniedPartialMitigation {
#[allow(unused_lifetimes)]
type Value<'tcx> =
rustc_session::config::mitigation_coverage::DeniedPartialMitigation;
}
impl ParameterizedOverTcx for rustc_span::ExpnData {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_span::ExpnData;
}
impl ParameterizedOverTcx for rustc_span::ExpnHash {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_span::ExpnHash;
}
impl ParameterizedOverTcx for rustc_span::ExpnId {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_span::ExpnId;
}
impl ParameterizedOverTcx for rustc_span::Ident {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_span::Ident;
}
impl ParameterizedOverTcx for rustc_span::SourceFile {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_span::SourceFile;
}
impl ParameterizedOverTcx for rustc_span::Span {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_span::Span;
}
impl ParameterizedOverTcx for rustc_span::Symbol {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_span::Symbol;
}
impl ParameterizedOverTcx for rustc_span::hygiene::SyntaxContextKey {
#[allow(unused_lifetimes)]
type Value<'tcx> = rustc_span::hygiene::SyntaxContextKey;
}trivially_parameterized_over_tcx! {
72 bool,
73 u32,
74 u64,
75 usize,
76 std::string::String,
77 crate::rmeta::AttrFlags,
79 crate::rmeta::CrateDep,
80 crate::rmeta::CrateHeader,
81 crate::rmeta::CrateRoot,
82 crate::rmeta::CrateRootUnhashed,
83 crate::rmeta::IncoherentImpls,
84 crate::rmeta::LocalDefId,
85 crate::rmeta::ProcMacroKind,
86 crate::rmeta::TraitImpls,
87 crate::rmeta::VariantData,
88 crate::rmeta::remapped_def_id::RemappedRawDefId,
89 rustc_abi::ReprOptions,
90 rustc_ast::DelimArgs,
91 rustc_attr_ir::Attribute,
92 rustc_attr_ir::ConstStability,
93 rustc_attr_ir::DefaultBodyStability,
94 rustc_attr_ir::Deprecation,
95 rustc_attr_ir::EiiDecl,
96 rustc_attr_ir::EiiImpl,
97 rustc_attr_ir::Stability,
98 rustc_attr_ir::StrippedCfgItem<LocalDefId>,
99 rustc_attr_ir::lang_items::LangItem,
100 rustc_crate_store::ForeignModule,
101 rustc_crate_store::LinkagePreference,
102 rustc_crate_store::NativeLib,
103 rustc_hir::Constness,
104 rustc_hir::CoroutineKind,
105 rustc_hir::Defaultness,
106 rustc_hir::OpaqueTyOrigin<rustc_hir::def_id::DefId>,
107 rustc_hir::PreciseCapturingArgKind<Symbol, Symbol>,
108 rustc_hir::Safety,
109 rustc_hir::def::DefKind,
110 rustc_hir::def_id::DefId,
111 rustc_hir::def_id::DefIndex,
112 rustc_hir::definitions::DefKey,
113 rustc_index::bit_set::DenseBitSet<u32>,
114 rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrs,
115 rustc_middle::middle::debugger_visualizer::DebuggerVisualizerFile,
116 rustc_middle::middle::deduced_param_attrs::DeducedParamAttrs,
117 rustc_middle::middle::exported_symbols::SymbolExportInfo,
118 rustc_middle::middle::lib_features::FeatureStability,
119 rustc_middle::middle::resolve::AmbigModChild,
120 rustc_middle::middle::resolve::DocLinkResMap,
121 rustc_middle::middle::resolve::ModChild,
122 rustc_middle::middle::resolve_bound_vars::ObjectLifetimeDefault,
123 rustc_middle::mir::ConstQualifs,
124 rustc_middle::mir::ConstValue,
125 rustc_middle::ty::AnonConstKind,
126 rustc_middle::ty::AssocContainer,
127 rustc_middle::ty::AsyncDestructor,
128 rustc_middle::ty::Asyncness,
129 rustc_middle::ty::Destructor,
130 rustc_middle::ty::Generics,
131 rustc_middle::ty::ImplTraitInTraitData,
132 rustc_middle::ty::IntrinsicDef,
133 rustc_middle::ty::RestrictionKind,
134 rustc_middle::ty::TraitDef,
135 rustc_middle::ty::Variance,
136 rustc_middle::ty::Visibility<LocalDefId>,
137 rustc_middle::ty::adjustment::CoerceUnsizedInfo,
138 rustc_middle::ty::fast_reject::SimplifiedType,
139 rustc_session::config::TargetModifier,
140 rustc_session::config::mitigation_coverage::DeniedPartialMitigation,
141 rustc_span::ExpnData,
142 rustc_span::ExpnHash,
143 rustc_span::ExpnId,
144 rustc_span::Ident,
145 rustc_span::SourceFile,
146 rustc_span::Span,
147 rustc_span::Symbol,
148 rustc_span::hygiene::SyntaxContextKey,
149 }
151
152macro_rules! parameterized_over_tcx {
155 ($($( $fake_path:ident )::+ ),+ $(,)?) => {
156 $(
157 impl ParameterizedOverTcx for $( $fake_path )::+ <'static> {
158 type Value<'tcx> = $( $fake_path )::+ <'tcx>;
159 }
160 )*
161 }
162}
163
164impl ParameterizedOverTcx for crate::rmeta::DefPathHashMapRef<'static> {
type Value<'tcx> = crate::rmeta::DefPathHashMapRef<'tcx>;
}
impl ParameterizedOverTcx for
rustc_middle::middle::exported_symbols::ExportedSymbol<'static> {
type Value<'tcx> =
rustc_middle::middle::exported_symbols::ExportedSymbol<'tcx>;
}
impl ParameterizedOverTcx for rustc_middle::mir::Body<'static> {
type Value<'tcx> = rustc_middle::mir::Body<'tcx>;
}
impl ParameterizedOverTcx for rustc_middle::mir::CoroutineLayout<'static> {
type Value<'tcx> = rustc_middle::mir::CoroutineLayout<'tcx>;
}
impl ParameterizedOverTcx for
rustc_middle::mir::interpret::ConstAllocation<'static> {
type Value<'tcx> = rustc_middle::mir::interpret::ConstAllocation<'tcx>;
}
impl ParameterizedOverTcx for rustc_middle::ty::Clause<'static> {
type Value<'tcx> = rustc_middle::ty::Clause<'tcx>;
}
impl ParameterizedOverTcx for rustc_middle::ty::Const<'static> {
type Value<'tcx> = rustc_middle::ty::Const<'tcx>;
}
impl ParameterizedOverTcx for rustc_middle::ty::ConstConditions<'static> {
type Value<'tcx> = rustc_middle::ty::ConstConditions<'tcx>;
}
impl ParameterizedOverTcx for rustc_middle::ty::FnSig<'static> {
type Value<'tcx> = rustc_middle::ty::FnSig<'tcx>;
}
impl ParameterizedOverTcx for rustc_middle::ty::GenericClauses<'static> {
type Value<'tcx> = rustc_middle::ty::GenericClauses<'tcx>;
}
impl ParameterizedOverTcx for rustc_middle::ty::ImplTraitHeader<'static> {
type Value<'tcx> = rustc_middle::ty::ImplTraitHeader<'tcx>;
}
impl ParameterizedOverTcx for rustc_middle::ty::TraitRef<'static> {
type Value<'tcx> = rustc_middle::ty::TraitRef<'tcx>;
}
impl ParameterizedOverTcx for rustc_middle::ty::Ty<'static> {
type Value<'tcx> = rustc_middle::ty::Ty<'tcx>;
}parameterized_over_tcx! {
165 crate::rmeta::DefPathHashMapRef,
167 rustc_middle::middle::exported_symbols::ExportedSymbol,
168 rustc_middle::mir::Body,
169 rustc_middle::mir::CoroutineLayout,
170 rustc_middle::mir::interpret::ConstAllocation,
171 rustc_middle::ty::Clause,
172 rustc_middle::ty::Const,
173 rustc_middle::ty::ConstConditions,
174 rustc_middle::ty::FnSig,
175 rustc_middle::ty::GenericClauses,
176 rustc_middle::ty::ImplTraitHeader,
177 rustc_middle::ty::TraitRef,
178 rustc_middle::ty::Ty,
179 }
181
182pub(super) trait EncodeFrom<'tcx, T> {
184 fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: T) -> Self;
188}
189
190macro_rules! trivial_encode_from {
191 (
192 $($ty:ty,)+
193 ) => {
194 $(
195 impl<'tcx> EncodeFrom<'tcx, $ty> for $ty {
196 fn encode_from<'a>(
197 _encoder: &mut EncodeContext<'a, 'tcx>,
198 value: $ty,
199 ) -> $ty {
200 value
201 }
202 }
203 )+
204 };
205}
206
207macro_rules! lazy_encode_from {
208 (
209 $($ty:ty,)+
210 ) => {
211 $(
212 impl<'tcx, B> EncodeFrom<'tcx, B> for LazyValue<$ty>
213 where
214 B: std::borrow::Borrow<<$ty as ParameterizedOverTcx>::Value<'tcx>>
215 {
216 fn encode_from<'a>(
217 encoder: &mut EncodeContext<'a, 'tcx>,
218 value: B,
219 ) -> LazyValue<$ty> {
220 encoder.lazy(value)
221 }
222 }
223 )+
224 };
225}
226
227impl<'tcx> EncodeFrom<'tcx, bool> for bool {
fn encode_from<'a>(_encoder: &mut EncodeContext<'a, 'tcx>, value: bool)
-> bool {
value
}
}
impl<'tcx> EncodeFrom<'tcx, u64> for u64 {
fn encode_from<'a>(_encoder: &mut EncodeContext<'a, 'tcx>, value: u64)
-> u64 {
value
}
}
impl<'tcx> EncodeFrom<'tcx, crate::rmeta::AttrFlags> for
crate::rmeta::AttrFlags {
fn encode_from<'a>(_encoder: &mut EncodeContext<'a, 'tcx>,
value: crate::rmeta::AttrFlags) -> crate::rmeta::AttrFlags {
value
}
}
impl<'tcx> EncodeFrom<'tcx, crate::rmeta::remapped_def_id::RemappedRawDefId>
for crate::rmeta::remapped_def_id::RemappedRawDefId {
fn encode_from<'a>(_encoder: &mut EncodeContext<'a, 'tcx>,
value: crate::rmeta::remapped_def_id::RemappedRawDefId)
-> crate::rmeta::remapped_def_id::RemappedRawDefId {
value
}
}
impl<'tcx> EncodeFrom<'tcx, rustc_hir::Constness> for rustc_hir::Constness {
fn encode_from<'a>(_encoder: &mut EncodeContext<'a, 'tcx>,
value: rustc_hir::Constness) -> rustc_hir::Constness {
value
}
}
impl<'tcx> EncodeFrom<'tcx, rustc_hir::CoroutineKind> for
rustc_hir::CoroutineKind {
fn encode_from<'a>(_encoder: &mut EncodeContext<'a, 'tcx>,
value: rustc_hir::CoroutineKind) -> rustc_hir::CoroutineKind {
value
}
}
impl<'tcx> EncodeFrom<'tcx, rustc_hir::Defaultness> for rustc_hir::Defaultness
{
fn encode_from<'a>(_encoder: &mut EncodeContext<'a, 'tcx>,
value: rustc_hir::Defaultness) -> rustc_hir::Defaultness {
value
}
}
impl<'tcx> EncodeFrom<'tcx, rustc_hir::Safety> for rustc_hir::Safety {
fn encode_from<'a>(_encoder: &mut EncodeContext<'a, 'tcx>,
value: rustc_hir::Safety) -> rustc_hir::Safety {
value
}
}
impl<'tcx> EncodeFrom<'tcx, rustc_hir::def::DefKind> for
rustc_hir::def::DefKind {
fn encode_from<'a>(_encoder: &mut EncodeContext<'a, 'tcx>,
value: rustc_hir::def::DefKind) -> rustc_hir::def::DefKind {
value
}
}
impl<'tcx> EncodeFrom<'tcx, rustc_middle::ty::Asyncness> for
rustc_middle::ty::Asyncness {
fn encode_from<'a>(_encoder: &mut EncodeContext<'a, 'tcx>,
value: rustc_middle::ty::Asyncness) -> rustc_middle::ty::Asyncness {
value
}
}trivial_encode_from! {
228 bool,
229 u64,
230 crate::rmeta::AttrFlags,
232 crate::rmeta::remapped_def_id::RemappedRawDefId,
233 rustc_hir::Constness,
234 rustc_hir::CoroutineKind,
235 rustc_hir::Defaultness,
236 rustc_hir::Safety,
237 rustc_hir::def::DefKind,
238 rustc_middle::ty::Asyncness,
239 }
241
242impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<(rustc_middle::mir::ConstValue, Ty<'static>)> where
B: std::borrow::Borrow<<(rustc_middle::mir::ConstValue, Ty<'static>) as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<(rustc_middle::mir::ConstValue, Ty<'static>)> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for LazyValue<crate::rmeta::VariantData>
where
B: std::borrow::Borrow<<crate::rmeta::VariantData as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<crate::rmeta::VariantData> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for LazyValue<rustc_abi::ReprOptions> where
B: std::borrow::Borrow<<rustc_abi::ReprOptions as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_abi::ReprOptions> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for LazyValue<rustc_ast::DelimArgs> where
B: std::borrow::Borrow<<rustc_ast::DelimArgs as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_ast::DelimArgs> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for LazyValue<rustc_attr_ir::ConstStability>
where
B: std::borrow::Borrow<<rustc_attr_ir::ConstStability as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_attr_ir::ConstStability> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_attr_ir::DefaultBodyStability> where
B: std::borrow::Borrow<<rustc_attr_ir::DefaultBodyStability as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_attr_ir::DefaultBodyStability> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for LazyValue<rustc_attr_ir::Deprecation>
where
B: std::borrow::Borrow<<rustc_attr_ir::Deprecation as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_attr_ir::Deprecation> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for LazyValue<rustc_attr_ir::Stability>
where
B: std::borrow::Borrow<<rustc_attr_ir::Stability as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_attr_ir::Stability> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_hir::OpaqueTyOrigin<rustc_span::def_id::DefId>> where
B: std::borrow::Borrow<<rustc_hir::OpaqueTyOrigin<rustc_span::def_id::DefId>
as ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_hir::OpaqueTyOrigin<rustc_span::def_id::DefId>> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for LazyValue<rustc_hir::def_id::DefId>
where
B: std::borrow::Borrow<<rustc_hir::def_id::DefId as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_hir::def_id::DefId> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_hir::def_id::DefIdMap<rustc_middle::ty::EarlyBinder<'static,
Ty<'static>>>> where
B: std::borrow::Borrow<<rustc_hir::def_id::DefIdMap<rustc_middle::ty::EarlyBinder<'static,
Ty<'static>>> as ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
->
LazyValue<rustc_hir::def_id::DefIdMap<rustc_middle::ty::EarlyBinder<'static,
Ty<'static>>>> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_hir::def_id::DefIdMap<std::vec::Vec<rustc_hir::def_id::DefId>>>
where
B: std::borrow::Borrow<<rustc_hir::def_id::DefIdMap<std::vec::Vec<rustc_hir::def_id::DefId>>
as ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
->
LazyValue<rustc_hir::def_id::DefIdMap<std::vec::Vec<rustc_hir::def_id::DefId>>> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_hir::definitions::DefKey> where
B: std::borrow::Borrow<<rustc_hir::definitions::DefKey as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_hir::definitions::DefKey> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_index::IndexVec<rustc_abi::FieldIdx, rustc_span::Symbol>>
where
B: std::borrow::Borrow<<rustc_index::IndexVec<rustc_abi::FieldIdx,
rustc_span::Symbol> as ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
->
LazyValue<rustc_index::IndexVec<rustc_abi::FieldIdx,
rustc_span::Symbol>> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_index::IndexVec<rustc_middle::mir::Promoted,
rustc_middle::mir::Body<'static>>> where
B: std::borrow::Borrow<<rustc_index::IndexVec<rustc_middle::mir::Promoted,
rustc_middle::mir::Body<'static>> as ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
->
LazyValue<rustc_index::IndexVec<rustc_middle::mir::Promoted,
rustc_middle::mir::Body<'static>>> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_index::bit_set::DenseBitSet<u32>> where
B: std::borrow::Borrow<<rustc_index::bit_set::DenseBitSet<u32> as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_index::bit_set::DenseBitSet<u32>> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrs> where
B: std::borrow::Borrow<<rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrs
as ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrs> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::middle::resolve::DocLinkResMap> where
B: std::borrow::Borrow<<rustc_middle::middle::resolve::DocLinkResMap as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_middle::middle::resolve::DocLinkResMap> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::middle::resolve_bound_vars::ObjectLifetimeDefault>
where
B: std::borrow::Borrow<<rustc_middle::middle::resolve_bound_vars::ObjectLifetimeDefault
as ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
->
LazyValue<rustc_middle::middle::resolve_bound_vars::ObjectLifetimeDefault> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::mir::Body<'static>> where
B: std::borrow::Borrow<<rustc_middle::mir::Body<'static> as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_middle::mir::Body<'static>> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::mir::ConstQualifs> where
B: std::borrow::Borrow<<rustc_middle::mir::ConstQualifs as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_middle::mir::ConstQualifs> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::mir::CoroutineLayout<'static>> where
B: std::borrow::Borrow<<rustc_middle::mir::CoroutineLayout<'static> as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_middle::mir::CoroutineLayout<'static>> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::mir::interpret::ConstAllocation<'static>> where
B: std::borrow::Borrow<<rustc_middle::mir::interpret::ConstAllocation<'static>
as ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_middle::mir::interpret::ConstAllocation<'static>> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::ty::AnonConstKind> where
B: std::borrow::Borrow<<rustc_middle::ty::AnonConstKind as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_middle::ty::AnonConstKind> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::ty::AssocContainer> where
B: std::borrow::Borrow<<rustc_middle::ty::AssocContainer as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_middle::ty::AssocContainer> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::ty::AsyncDestructor> where
B: std::borrow::Borrow<<rustc_middle::ty::AsyncDestructor as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_middle::ty::AsyncDestructor> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::ty::ConstConditions<'static>> where
B: std::borrow::Borrow<<rustc_middle::ty::ConstConditions<'static> as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_middle::ty::ConstConditions<'static>> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for LazyValue<rustc_middle::ty::Destructor>
where
B: std::borrow::Borrow<<rustc_middle::ty::Destructor as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_middle::ty::Destructor> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::ty::EarlyBinder<'static, Ty<'static>>> where
B: std::borrow::Borrow<<rustc_middle::ty::EarlyBinder<'static,
Ty<'static>> as ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_middle::ty::EarlyBinder<'static, Ty<'static>>> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::ty::EarlyBinder<'static,
rustc_middle::ty::Const<'static>>> where
B: std::borrow::Borrow<<rustc_middle::ty::EarlyBinder<'static,
rustc_middle::ty::Const<'static>> as ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
->
LazyValue<rustc_middle::ty::EarlyBinder<'static,
rustc_middle::ty::Const<'static>>> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::ty::EarlyBinder<'static,
rustc_middle::ty::PolyFnSig<'static>>> where
B: std::borrow::Borrow<<rustc_middle::ty::EarlyBinder<'static,
rustc_middle::ty::PolyFnSig<'static>> as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
->
LazyValue<rustc_middle::ty::EarlyBinder<'static,
rustc_middle::ty::PolyFnSig<'static>>> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::ty::GenericClauses<'static>> where
B: std::borrow::Borrow<<rustc_middle::ty::GenericClauses<'static> as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_middle::ty::GenericClauses<'static>> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for LazyValue<rustc_middle::ty::Generics>
where
B: std::borrow::Borrow<<rustc_middle::ty::Generics as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_middle::ty::Generics> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::ty::ImplTraitHeader<'static>> where
B: std::borrow::Borrow<<rustc_middle::ty::ImplTraitHeader<'static> as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_middle::ty::ImplTraitHeader<'static>> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::ty::ImplTraitInTraitData> where
B: std::borrow::Borrow<<rustc_middle::ty::ImplTraitInTraitData as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_middle::ty::ImplTraitInTraitData> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::ty::IntrinsicDef> where
B: std::borrow::Borrow<<rustc_middle::ty::IntrinsicDef as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_middle::ty::IntrinsicDef> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::ty::RestrictionKind> where
B: std::borrow::Borrow<<rustc_middle::ty::RestrictionKind as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_middle::ty::RestrictionKind> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::ty::Visibility<rustc_span::def_id::LocalDefId>>
where
B: std::borrow::Borrow<<rustc_middle::ty::Visibility<rustc_span::def_id::LocalDefId>
as ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
->
LazyValue<rustc_middle::ty::Visibility<rustc_span::def_id::LocalDefId>> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::ty::adjustment::CoerceUnsizedInfo> where
B: std::borrow::Borrow<<rustc_middle::ty::adjustment::CoerceUnsizedInfo as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_middle::ty::adjustment::CoerceUnsizedInfo> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<rustc_middle::ty::trait_def::TraitDef> where
B: std::borrow::Borrow<<rustc_middle::ty::trait_def::TraitDef as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_middle::ty::trait_def::TraitDef> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for LazyValue<rustc_span::ExpnId> where
B: std::borrow::Borrow<<rustc_span::ExpnId as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_span::ExpnId> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for LazyValue<rustc_span::Span> where
B: std::borrow::Borrow<<rustc_span::Span as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<rustc_span::Span> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<std::option::Option<rustc_middle::ty::EarlyBinder<'static,
rustc_middle::ty::Const<'static>>>> where
B: std::borrow::Borrow<<std::option::Option<rustc_middle::ty::EarlyBinder<'static,
rustc_middle::ty::Const<'static>>> as ParameterizedOverTcx>::Value<'tcx>>
{
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
->
LazyValue<std::option::Option<rustc_middle::ty::EarlyBinder<'static,
rustc_middle::ty::Const<'static>>>> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for LazyValue<std::string::String> where
B: std::borrow::Borrow<<std::string::String as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
-> LazyValue<std::string::String> {
encoder.lazy(value)
}
}
impl<'tcx, B> EncodeFrom<'tcx, B> for
LazyValue<std::vec::Vec<(usize, rustc_index::bit_set::DenseBitSet<u32>)>>
where
B: std::borrow::Borrow<<std::vec::Vec<(usize,
rustc_index::bit_set::DenseBitSet<u32>)> as
ParameterizedOverTcx>::Value<'tcx>> {
fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, value: B)
->
LazyValue<std::vec::Vec<(usize,
rustc_index::bit_set::DenseBitSet<u32>)>> {
encoder.lazy(value)
}
}lazy_encode_from! {
243 (rustc_middle::mir::ConstValue, Ty<'static>),
245 crate::rmeta::VariantData,
246 rustc_abi::ReprOptions,
247 rustc_ast::DelimArgs,
248 rustc_attr_ir::ConstStability,
249 rustc_attr_ir::DefaultBodyStability,
250 rustc_attr_ir::Deprecation,
251 rustc_attr_ir::Stability,
252 rustc_hir::OpaqueTyOrigin<rustc_span::def_id::DefId>,
253 rustc_hir::def_id::DefId,
254 rustc_hir::def_id::DefIdMap<rustc_middle::ty::EarlyBinder<'static, Ty<'static>>>,
255 rustc_hir::def_id::DefIdMap<std::vec::Vec<rustc_hir::def_id::DefId>>,
256 rustc_hir::definitions::DefKey,
257 rustc_index::IndexVec<rustc_abi::FieldIdx, rustc_span::Symbol>,
258 rustc_index::IndexVec<rustc_middle::mir::Promoted, rustc_middle::mir::Body<'static>>,
259 rustc_index::bit_set::DenseBitSet<u32>,
260 rustc_middle::middle::codegen_fn_attrs::CodegenFnAttrs,
261 rustc_middle::middle::resolve::DocLinkResMap,
262 rustc_middle::middle::resolve_bound_vars::ObjectLifetimeDefault,
263 rustc_middle::mir::Body<'static>,
264 rustc_middle::mir::ConstQualifs,
265 rustc_middle::mir::CoroutineLayout<'static>,
266 rustc_middle::mir::interpret::ConstAllocation<'static>,
267 rustc_middle::ty::AnonConstKind,
268 rustc_middle::ty::AssocContainer,
269 rustc_middle::ty::AsyncDestructor,
270 rustc_middle::ty::ConstConditions<'static>,
271 rustc_middle::ty::Destructor,
272 rustc_middle::ty::EarlyBinder<'static, Ty<'static>>,
273 rustc_middle::ty::EarlyBinder<'static, rustc_middle::ty::Const<'static>>,
274 rustc_middle::ty::EarlyBinder<'static, rustc_middle::ty::PolyFnSig<'static>>,
275 rustc_middle::ty::GenericClauses<'static>,
276 rustc_middle::ty::Generics,
277 rustc_middle::ty::ImplTraitHeader<'static>,
278 rustc_middle::ty::ImplTraitInTraitData,
279 rustc_middle::ty::IntrinsicDef,
280 rustc_middle::ty::RestrictionKind,
281 rustc_middle::ty::Visibility<rustc_span::def_id::LocalDefId>,
282 rustc_middle::ty::adjustment::CoerceUnsizedInfo,
283 rustc_middle::ty::trait_def::TraitDef,
284 rustc_span::ExpnId,
285 rustc_span::Span,
286 std::option::Option<rustc_middle::ty::EarlyBinder<'static, rustc_middle::ty::Const<'static>>>,
287 std::string::String,
288 std::vec::Vec<(usize, rustc_index::bit_set::DenseBitSet<u32>)>,
289 }
291
292impl<'tcx, T, B> EncodeFrom<'tcx, Option<B>> for Option<LazyValue<T>>
293where
294 T: ParameterizedOverTcx,
295 T::Value<'tcx>: for<'b> Encodable<EncodeContext<'b, 'tcx>>,
296 B: std::borrow::Borrow<T::Value<'tcx>>,
297{
298 fn encode_from<'a>(
299 encoder: &mut EncodeContext<'a, 'tcx>,
300 value: Option<B>,
301 ) -> Option<LazyValue<T>> {
302 value.map(|v| encoder.lazy(v))
303 }
304}
305
306impl<'tcx, T, I, B> EncodeFrom<'tcx, I> for LazyArray<T>
307where
308 T: ParameterizedOverTcx,
309 I: IntoIterator<Item = B>,
310 B: std::borrow::Borrow<T::Value<'tcx>>,
311 T::Value<'tcx>: for<'a> Encodable<EncodeContext<'a, 'tcx>>,
312{
313 fn encode_from<'a>(encoder: &mut EncodeContext<'a, 'tcx>, values: I) -> Self {
314 encoder.lazy_array(values)
315 }
316}