mirror of
https://github.com/rust-lang/rust.git
synced 2025-06-05 11:48:30 +00:00
Auto merge of #115831 - nnethercote:remove-unused-Lift-impls, r=bjorn3
Remove unused `Lift` impls r? `@bjorn3`
This commit is contained in:
commit
24bb8842cb
@ -442,8 +442,8 @@ impl<'tcx> MirBorrowckCtxt<'_, 'tcx> {
|
|||||||
span: Span,
|
span: Span,
|
||||||
counter: usize,
|
counter: usize,
|
||||||
) -> RegionNameHighlight {
|
) -> RegionNameHighlight {
|
||||||
let mut highlight = RegionHighlightMode::new(self.infcx.tcx);
|
let mut highlight = RegionHighlightMode::default();
|
||||||
highlight.highlighting_region_vid(needle_fr, counter);
|
highlight.highlighting_region_vid(self.infcx.tcx, needle_fr, counter);
|
||||||
let type_name =
|
let type_name =
|
||||||
self.infcx.extract_inference_diagnostics_data(ty.into(), Some(highlight)).name;
|
self.infcx.extract_inference_diagnostics_data(ty.into(), Some(highlight)).name;
|
||||||
|
|
||||||
@ -804,8 +804,8 @@ impl<'tcx> MirBorrowckCtxt<'_, 'tcx> {
|
|||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut highlight = RegionHighlightMode::new(tcx);
|
let mut highlight = RegionHighlightMode::default();
|
||||||
highlight.highlighting_region_vid(fr, *self.next_region_name.try_borrow().unwrap());
|
highlight.highlighting_region_vid(tcx, fr, *self.next_region_name.try_borrow().unwrap());
|
||||||
let type_name =
|
let type_name =
|
||||||
self.infcx.extract_inference_diagnostics_data(yield_ty.into(), Some(highlight)).name;
|
self.infcx.extract_inference_diagnostics_data(yield_ty.into(), Some(highlight)).name;
|
||||||
|
|
||||||
|
@ -385,7 +385,7 @@ impl<'tcx> NiceRegionError<'_, 'tcx> {
|
|||||||
|
|
||||||
let highlight_trait_ref = |trait_ref| Highlighted {
|
let highlight_trait_ref = |trait_ref| Highlighted {
|
||||||
tcx: self.tcx(),
|
tcx: self.tcx(),
|
||||||
highlight: RegionHighlightMode::new(self.tcx()),
|
highlight: RegionHighlightMode::default(),
|
||||||
value: trait_ref,
|
value: trait_ref,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -67,9 +67,9 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx> HighlightBuilder<'tcx> {
|
impl<'tcx> HighlightBuilder<'tcx> {
|
||||||
fn build(tcx: TyCtxt<'tcx>, ty: Ty<'tcx>) -> RegionHighlightMode<'tcx> {
|
fn build(ty: Ty<'tcx>) -> RegionHighlightMode<'tcx> {
|
||||||
let mut builder =
|
let mut builder =
|
||||||
HighlightBuilder { highlight: RegionHighlightMode::new(tcx), counter: 1 };
|
HighlightBuilder { highlight: RegionHighlightMode::default(), counter: 1 };
|
||||||
builder.visit_ty(ty);
|
builder.visit_ty(ty);
|
||||||
builder.highlight
|
builder.highlight
|
||||||
}
|
}
|
||||||
@ -85,12 +85,12 @@ impl<'a, 'tcx> NiceRegionError<'a, 'tcx> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
let expected_highlight = HighlightBuilder::build(self.tcx(), expected);
|
let expected_highlight = HighlightBuilder::build(expected);
|
||||||
let expected = self
|
let expected = self
|
||||||
.cx
|
.cx
|
||||||
.extract_inference_diagnostics_data(expected.into(), Some(expected_highlight))
|
.extract_inference_diagnostics_data(expected.into(), Some(expected_highlight))
|
||||||
.name;
|
.name;
|
||||||
let found_highlight = HighlightBuilder::build(self.tcx(), found);
|
let found_highlight = HighlightBuilder::build(found);
|
||||||
let found =
|
let found =
|
||||||
self.cx.extract_inference_diagnostics_data(found.into(), Some(found_highlight)).name;
|
self.cx.extract_inference_diagnostics_data(found.into(), Some(found_highlight)).name;
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
//! and use that to decide when one free region outlives another, and so forth.
|
//! and use that to decide when one free region outlives another, and so forth.
|
||||||
|
|
||||||
use rustc_data_structures::transitive_relation::TransitiveRelation;
|
use rustc_data_structures::transitive_relation::TransitiveRelation;
|
||||||
use rustc_middle::ty::{Lift, Region, TyCtxt};
|
use rustc_middle::ty::{Region, TyCtxt};
|
||||||
|
|
||||||
/// Combines a `FreeRegionMap` and a `TyCtxt`.
|
/// Combines a `FreeRegionMap` and a `TyCtxt`.
|
||||||
///
|
///
|
||||||
@ -101,10 +101,3 @@ impl<'tcx> FreeRegionMap<'tcx> {
|
|||||||
result
|
result
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a, 'tcx> Lift<'tcx> for FreeRegionMap<'a> {
|
|
||||||
type Lifted = FreeRegionMap<'tcx>;
|
|
||||||
fn lift_to_tcx(self, tcx: TyCtxt<'tcx>) -> Option<FreeRegionMap<'tcx>> {
|
|
||||||
self.relation.maybe_map(|fr| tcx.lift(fr)).map(|relation| FreeRegionMap { relation })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -34,7 +34,7 @@ use std::ops::Index;
|
|||||||
/// variables have been rewritten to "canonical vars". These are
|
/// variables have been rewritten to "canonical vars". These are
|
||||||
/// numbered starting from 0 in order of first appearance.
|
/// numbered starting from 0 in order of first appearance.
|
||||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, TyDecodable, TyEncodable)]
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, TyDecodable, TyEncodable)]
|
||||||
#[derive(HashStable, TypeFoldable, TypeVisitable, Lift)]
|
#[derive(HashStable, TypeFoldable, TypeVisitable)]
|
||||||
pub struct Canonical<'tcx, V> {
|
pub struct Canonical<'tcx, V> {
|
||||||
pub value: V,
|
pub value: V,
|
||||||
pub max_universe: ty::UniverseIndex,
|
pub max_universe: ty::UniverseIndex,
|
||||||
@ -72,7 +72,7 @@ impl<'tcx> ty::TypeFoldable<TyCtxt<'tcx>> for CanonicalVarInfos<'tcx> {
|
|||||||
/// variables. You will need to supply it later to instantiate the
|
/// variables. You will need to supply it later to instantiate the
|
||||||
/// canonicalized query response.
|
/// canonicalized query response.
|
||||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, TyDecodable, TyEncodable)]
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, TyDecodable, TyEncodable)]
|
||||||
#[derive(HashStable, TypeFoldable, TypeVisitable, Lift)]
|
#[derive(HashStable, TypeFoldable, TypeVisitable)]
|
||||||
pub struct CanonicalVarValues<'tcx> {
|
pub struct CanonicalVarValues<'tcx> {
|
||||||
pub var_values: ty::GenericArgsRef<'tcx>,
|
pub var_values: ty::GenericArgsRef<'tcx>,
|
||||||
}
|
}
|
||||||
@ -311,7 +311,7 @@ pub enum CanonicalTyVarKind {
|
|||||||
/// After we execute a query with a canonicalized key, we get back a
|
/// After we execute a query with a canonicalized key, we get back a
|
||||||
/// `Canonical<QueryResponse<..>>`. You can use
|
/// `Canonical<QueryResponse<..>>`. You can use
|
||||||
/// `instantiate_query_result` to access the data in this result.
|
/// `instantiate_query_result` to access the data in this result.
|
||||||
#[derive(Clone, Debug, HashStable, TypeFoldable, TypeVisitable, Lift)]
|
#[derive(Clone, Debug, HashStable, TypeFoldable, TypeVisitable)]
|
||||||
pub struct QueryResponse<'tcx, R> {
|
pub struct QueryResponse<'tcx, R> {
|
||||||
pub var_values: CanonicalVarValues<'tcx>,
|
pub var_values: CanonicalVarValues<'tcx>,
|
||||||
pub region_constraints: QueryRegionConstraints<'tcx>,
|
pub region_constraints: QueryRegionConstraints<'tcx>,
|
||||||
@ -326,7 +326,7 @@ pub struct QueryResponse<'tcx, R> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Default, PartialEq, Eq, Hash)]
|
#[derive(Clone, Debug, Default, PartialEq, Eq, Hash)]
|
||||||
#[derive(HashStable, TypeFoldable, TypeVisitable, Lift)]
|
#[derive(HashStable, TypeFoldable, TypeVisitable)]
|
||||||
pub struct QueryRegionConstraints<'tcx> {
|
pub struct QueryRegionConstraints<'tcx> {
|
||||||
pub outlives: Vec<QueryOutlivesConstraint<'tcx>>,
|
pub outlives: Vec<QueryOutlivesConstraint<'tcx>>,
|
||||||
pub member_constraints: Vec<MemberConstraint<'tcx>>,
|
pub member_constraints: Vec<MemberConstraint<'tcx>>,
|
||||||
@ -432,7 +432,7 @@ impl<'tcx, V> Canonical<'tcx, V> {
|
|||||||
pub type QueryOutlivesConstraint<'tcx> =
|
pub type QueryOutlivesConstraint<'tcx> =
|
||||||
(ty::OutlivesPredicate<GenericArg<'tcx>, Region<'tcx>>, ConstraintCategory<'tcx>);
|
(ty::OutlivesPredicate<GenericArg<'tcx>, Region<'tcx>>, ConstraintCategory<'tcx>);
|
||||||
|
|
||||||
TrivialTypeTraversalAndLiftImpls! {
|
TrivialTypeTraversalImpls! {
|
||||||
crate::infer::canonical::Certainty,
|
crate::infer::canonical::Certainty,
|
||||||
crate::infer::canonical::CanonicalTyVarKind,
|
crate::infer::canonical::CanonicalTyVarKind,
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,7 @@ use rustc_span::Span;
|
|||||||
/// R0 member of [O1..On]
|
/// R0 member of [O1..On]
|
||||||
/// ```
|
/// ```
|
||||||
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
|
||||||
#[derive(HashStable, TypeFoldable, TypeVisitable, Lift)]
|
#[derive(HashStable, TypeFoldable, TypeVisitable)]
|
||||||
pub struct MemberConstraint<'tcx> {
|
pub struct MemberConstraint<'tcx> {
|
||||||
/// The `DefId` and args of the opaque type causing this constraint.
|
/// The `DefId` and args of the opaque type causing this constraint.
|
||||||
/// Used for error reporting.
|
/// Used for error reporting.
|
||||||
|
@ -42,7 +42,7 @@ macro_rules! span_bug {
|
|||||||
// the impls for you.
|
// the impls for you.
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! CloneLiftImpls {
|
macro_rules! TrivialLiftImpls {
|
||||||
($($ty:ty),+ $(,)?) => {
|
($($ty:ty),+ $(,)?) => {
|
||||||
$(
|
$(
|
||||||
impl<'tcx> $crate::ty::Lift<'tcx> for $ty {
|
impl<'tcx> $crate::ty::Lift<'tcx> for $ty {
|
||||||
@ -96,6 +96,6 @@ macro_rules! TrivialTypeTraversalImpls {
|
|||||||
macro_rules! TrivialTypeTraversalAndLiftImpls {
|
macro_rules! TrivialTypeTraversalAndLiftImpls {
|
||||||
($($t:tt)*) => {
|
($($t:tt)*) => {
|
||||||
TrivialTypeTraversalImpls! { $($t)* }
|
TrivialTypeTraversalImpls! { $($t)* }
|
||||||
CloneLiftImpls! { $($t)* }
|
TrivialLiftImpls! { $($t)* }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -178,7 +178,7 @@ impl<'tcx> graph::WithPredecessors for BasicBlocks<'tcx> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TrivialTypeTraversalAndLiftImpls! { Cache }
|
TrivialTypeTraversalImpls! { Cache }
|
||||||
|
|
||||||
impl<S: Encoder> Encodable<S> for Cache {
|
impl<S: Encoder> Encodable<S> for Cache {
|
||||||
#[inline]
|
#[inline]
|
||||||
|
@ -67,7 +67,7 @@ impl Into<ErrorGuaranteed> for ReportedErrorInfo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TrivialTypeTraversalAndLiftImpls! { ErrorHandled }
|
TrivialTypeTraversalImpls! { ErrorHandled }
|
||||||
|
|
||||||
pub type EvalToAllocationRawResult<'tcx> = Result<ConstAlloc<'tcx>, ErrorHandled>;
|
pub type EvalToAllocationRawResult<'tcx> = Result<ConstAlloc<'tcx>, ErrorHandled>;
|
||||||
pub type EvalToConstValueResult<'tcx> = Result<ConstValue<'tcx>, ErrorHandled>;
|
pub type EvalToConstValueResult<'tcx> = Result<ConstValue<'tcx>, ErrorHandled>;
|
||||||
|
@ -162,7 +162,7 @@ pub use self::pointer::{Pointer, PointerArithmetic, Provenance};
|
|||||||
/// - A constant
|
/// - A constant
|
||||||
/// - A static
|
/// - A static
|
||||||
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, TyEncodable, TyDecodable)]
|
#[derive(Copy, Clone, Debug, Eq, PartialEq, Hash, TyEncodable, TyDecodable)]
|
||||||
#[derive(HashStable, Lift, TypeFoldable, TypeVisitable)]
|
#[derive(HashStable, TypeFoldable, TypeVisitable)]
|
||||||
pub struct GlobalId<'tcx> {
|
pub struct GlobalId<'tcx> {
|
||||||
/// For a constant or static, the `Instance` of the item itself.
|
/// For a constant or static, the `Instance` of the item itself.
|
||||||
/// For a promoted global, the `Instance` of the function they belong to.
|
/// For a promoted global, the `Instance` of the function they belong to.
|
||||||
|
@ -744,7 +744,7 @@ pub enum BindingForm<'tcx> {
|
|||||||
RefForGuard,
|
RefForGuard,
|
||||||
}
|
}
|
||||||
|
|
||||||
TrivialTypeTraversalAndLiftImpls! { BindingForm<'tcx> }
|
TrivialTypeTraversalImpls! { BindingForm<'tcx> }
|
||||||
|
|
||||||
mod binding_form_impl {
|
mod binding_form_impl {
|
||||||
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
use rustc_data_structures::stable_hasher::{HashStable, StableHasher};
|
||||||
@ -2295,7 +2295,7 @@ pub struct Constant<'tcx> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Copy, PartialEq, Eq, TyEncodable, TyDecodable, Hash, HashStable, Debug)]
|
#[derive(Clone, Copy, PartialEq, Eq, TyEncodable, TyDecodable, Hash, HashStable, Debug)]
|
||||||
#[derive(Lift, TypeFoldable, TypeVisitable)]
|
#[derive(TypeFoldable, TypeVisitable)]
|
||||||
pub enum ConstantKind<'tcx> {
|
pub enum ConstantKind<'tcx> {
|
||||||
/// This constant came from the type system.
|
/// This constant came from the type system.
|
||||||
///
|
///
|
||||||
@ -2615,7 +2615,7 @@ impl<'tcx> ConstantKind<'tcx> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// An unevaluated (potentially generic) constant used in MIR.
|
/// An unevaluated (potentially generic) constant used in MIR.
|
||||||
#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord, TyEncodable, TyDecodable, Lift)]
|
#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord, TyEncodable, TyDecodable)]
|
||||||
#[derive(Hash, HashStable, TypeFoldable, TypeVisitable)]
|
#[derive(Hash, HashStable, TypeFoldable, TypeVisitable)]
|
||||||
pub struct UnevaluatedConst<'tcx> {
|
pub struct UnevaluatedConst<'tcx> {
|
||||||
pub def: DefId,
|
pub def: DefId,
|
||||||
|
@ -334,7 +334,7 @@ rustc_data_structures::static_assert_size!(ConstraintCategory<'_>, 16);
|
|||||||
///
|
///
|
||||||
/// See also `rustc_const_eval::borrow_check::constraints`.
|
/// See also `rustc_const_eval::borrow_check::constraints`.
|
||||||
#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
|
#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord, Hash)]
|
||||||
#[derive(TyEncodable, TyDecodable, HashStable, Lift, TypeVisitable, TypeFoldable)]
|
#[derive(TyEncodable, TyDecodable, HashStable, TypeVisitable, TypeFoldable)]
|
||||||
pub enum ConstraintCategory<'tcx> {
|
pub enum ConstraintCategory<'tcx> {
|
||||||
Return(ReturnConstraint),
|
Return(ReturnConstraint),
|
||||||
Yield,
|
Yield,
|
||||||
|
@ -5,7 +5,7 @@ use rustc_ast::InlineAsmTemplatePiece;
|
|||||||
use super::*;
|
use super::*;
|
||||||
use crate::ty;
|
use crate::ty;
|
||||||
|
|
||||||
TrivialTypeTraversalAndLiftImpls! {
|
TrivialTypeTraversalImpls! {
|
||||||
BlockTailInfo,
|
BlockTailInfo,
|
||||||
MirPhase,
|
MirPhase,
|
||||||
SourceInfo,
|
SourceInfo,
|
||||||
|
@ -13,7 +13,7 @@ use crate::infer::canonical::Canonical;
|
|||||||
use crate::mir::ConstraintCategory;
|
use crate::mir::ConstraintCategory;
|
||||||
use crate::ty::abstract_const::NotConstEvaluatable;
|
use crate::ty::abstract_const::NotConstEvaluatable;
|
||||||
use crate::ty::GenericArgsRef;
|
use crate::ty::GenericArgsRef;
|
||||||
use crate::ty::{self, AdtKind, Ty, TyCtxt};
|
use crate::ty::{self, AdtKind, Ty};
|
||||||
|
|
||||||
use rustc_data_structures::sync::Lrc;
|
use rustc_data_structures::sync::Lrc;
|
||||||
use rustc_errors::{Applicability, Diagnostic};
|
use rustc_errors::{Applicability, Diagnostic};
|
||||||
@ -86,7 +86,7 @@ pub enum Reveal {
|
|||||||
///
|
///
|
||||||
/// We do not want to intern this as there are a lot of obligation causes which
|
/// We do not want to intern this as there are a lot of obligation causes which
|
||||||
/// only live for a short period of time.
|
/// only live for a short period of time.
|
||||||
#[derive(Clone, Debug, PartialEq, Eq, Lift, HashStable, TyEncodable, TyDecodable)]
|
#[derive(Clone, Debug, PartialEq, Eq, HashStable, TyEncodable, TyDecodable)]
|
||||||
#[derive(TypeVisitable, TypeFoldable)]
|
#[derive(TypeVisitable, TypeFoldable)]
|
||||||
pub struct ObligationCause<'tcx> {
|
pub struct ObligationCause<'tcx> {
|
||||||
pub span: Span,
|
pub span: Span,
|
||||||
@ -194,7 +194,7 @@ impl<'tcx> ObligationCause<'tcx> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, Eq, Lift, HashStable, TyEncodable, TyDecodable)]
|
#[derive(Clone, Debug, PartialEq, Eq, HashStable, TyEncodable, TyDecodable)]
|
||||||
#[derive(TypeVisitable, TypeFoldable)]
|
#[derive(TypeVisitable, TypeFoldable)]
|
||||||
pub struct UnifyReceiverContext<'tcx> {
|
pub struct UnifyReceiverContext<'tcx> {
|
||||||
pub assoc_item: ty::AssocItem,
|
pub assoc_item: ty::AssocItem,
|
||||||
@ -202,7 +202,7 @@ pub struct UnifyReceiverContext<'tcx> {
|
|||||||
pub args: GenericArgsRef<'tcx>,
|
pub args: GenericArgsRef<'tcx>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, PartialEq, Eq, Lift, Default, HashStable)]
|
#[derive(Clone, PartialEq, Eq, Default, HashStable)]
|
||||||
#[derive(TypeVisitable, TypeFoldable, TyEncodable, TyDecodable)]
|
#[derive(TypeVisitable, TypeFoldable, TyEncodable, TyDecodable)]
|
||||||
pub struct InternedObligationCauseCode<'tcx> {
|
pub struct InternedObligationCauseCode<'tcx> {
|
||||||
/// `None` for `ObligationCauseCode::MiscObligation` (a common case, occurs ~60% of
|
/// `None` for `ObligationCauseCode::MiscObligation` (a common case, occurs ~60% of
|
||||||
@ -238,7 +238,7 @@ impl<'tcx> std::ops::Deref for InternedObligationCauseCode<'tcx> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, Eq, Lift, HashStable, TyEncodable, TyDecodable)]
|
#[derive(Clone, Debug, PartialEq, Eq, HashStable, TyEncodable, TyDecodable)]
|
||||||
#[derive(TypeVisitable, TypeFoldable)]
|
#[derive(TypeVisitable, TypeFoldable)]
|
||||||
pub enum ObligationCauseCode<'tcx> {
|
pub enum ObligationCauseCode<'tcx> {
|
||||||
/// Not well classified or should be obvious from the span.
|
/// Not well classified or should be obvious from the span.
|
||||||
@ -470,7 +470,7 @@ pub enum WellFormedLoc {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, Eq, Lift, HashStable, TyEncodable, TyDecodable)]
|
#[derive(Clone, Debug, PartialEq, Eq, HashStable, TyEncodable, TyDecodable)]
|
||||||
#[derive(TypeVisitable, TypeFoldable)]
|
#[derive(TypeVisitable, TypeFoldable)]
|
||||||
pub struct ImplDerivedObligationCause<'tcx> {
|
pub struct ImplDerivedObligationCause<'tcx> {
|
||||||
pub derived: DerivedObligationCause<'tcx>,
|
pub derived: DerivedObligationCause<'tcx>,
|
||||||
@ -524,14 +524,7 @@ pub enum StatementAsExpression {
|
|||||||
NeedsBoxing,
|
NeedsBoxing,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx> ty::Lift<'tcx> for StatementAsExpression {
|
#[derive(Clone, Debug, PartialEq, Eq, HashStable, TyEncodable, TyDecodable)]
|
||||||
type Lifted = StatementAsExpression;
|
|
||||||
fn lift_to_tcx(self, _tcx: TyCtxt<'tcx>) -> Option<StatementAsExpression> {
|
|
||||||
Some(self)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, Eq, Lift, HashStable, TyEncodable, TyDecodable)]
|
|
||||||
#[derive(TypeVisitable, TypeFoldable)]
|
#[derive(TypeVisitable, TypeFoldable)]
|
||||||
pub struct MatchExpressionArmCause<'tcx> {
|
pub struct MatchExpressionArmCause<'tcx> {
|
||||||
pub arm_block_id: Option<hir::HirId>,
|
pub arm_block_id: Option<hir::HirId>,
|
||||||
@ -547,7 +540,7 @@ pub struct MatchExpressionArmCause<'tcx> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
#[derive(Copy, Clone, Debug, PartialEq, Eq)]
|
||||||
#[derive(Lift, TypeFoldable, TypeVisitable, HashStable, TyEncodable, TyDecodable)]
|
#[derive(TypeFoldable, TypeVisitable, HashStable, TyEncodable, TyDecodable)]
|
||||||
pub struct IfExpressionCause<'tcx> {
|
pub struct IfExpressionCause<'tcx> {
|
||||||
pub then_id: hir::HirId,
|
pub then_id: hir::HirId,
|
||||||
pub else_id: hir::HirId,
|
pub else_id: hir::HirId,
|
||||||
@ -557,7 +550,7 @@ pub struct IfExpressionCause<'tcx> {
|
|||||||
pub opt_suggest_box_span: Option<Span>,
|
pub opt_suggest_box_span: Option<Span>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, Eq, Lift, HashStable, TyEncodable, TyDecodable)]
|
#[derive(Clone, Debug, PartialEq, Eq, HashStable, TyEncodable, TyDecodable)]
|
||||||
#[derive(TypeVisitable, TypeFoldable)]
|
#[derive(TypeVisitable, TypeFoldable)]
|
||||||
pub struct DerivedObligationCause<'tcx> {
|
pub struct DerivedObligationCause<'tcx> {
|
||||||
/// The trait predicate of the parent obligation that led to the
|
/// The trait predicate of the parent obligation that led to the
|
||||||
@ -570,7 +563,7 @@ pub struct DerivedObligationCause<'tcx> {
|
|||||||
pub parent_code: InternedObligationCauseCode<'tcx>,
|
pub parent_code: InternedObligationCauseCode<'tcx>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, TypeVisitable, Lift)]
|
#[derive(Clone, Debug, TypeVisitable)]
|
||||||
pub enum SelectionError<'tcx> {
|
pub enum SelectionError<'tcx> {
|
||||||
/// The trait is not implemented.
|
/// The trait is not implemented.
|
||||||
Unimplemented,
|
Unimplemented,
|
||||||
@ -593,7 +586,7 @@ pub enum SelectionError<'tcx> {
|
|||||||
OpaqueTypeAutoTraitLeakageUnknown(DefId),
|
OpaqueTypeAutoTraitLeakageUnknown(DefId),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, TypeVisitable, Lift)]
|
#[derive(Clone, Debug, TypeVisitable)]
|
||||||
pub struct SelectionOutputTypeParameterMismatch<'tcx> {
|
pub struct SelectionOutputTypeParameterMismatch<'tcx> {
|
||||||
pub found_trait_ref: ty::PolyTraitRef<'tcx>,
|
pub found_trait_ref: ty::PolyTraitRef<'tcx>,
|
||||||
pub expected_trait_ref: ty::PolyTraitRef<'tcx>,
|
pub expected_trait_ref: ty::PolyTraitRef<'tcx>,
|
||||||
@ -638,7 +631,7 @@ pub type SelectionResult<'tcx, T> = Result<Option<T>, SelectionError<'tcx>>;
|
|||||||
/// ### The type parameter `N`
|
/// ### The type parameter `N`
|
||||||
///
|
///
|
||||||
/// See explanation on `ImplSourceUserDefinedData`.
|
/// See explanation on `ImplSourceUserDefinedData`.
|
||||||
#[derive(Clone, PartialEq, Eq, TyEncodable, TyDecodable, HashStable, Lift)]
|
#[derive(Clone, PartialEq, Eq, TyEncodable, TyDecodable, HashStable)]
|
||||||
#[derive(TypeFoldable, TypeVisitable)]
|
#[derive(TypeFoldable, TypeVisitable)]
|
||||||
pub enum ImplSource<'tcx, N> {
|
pub enum ImplSource<'tcx, N> {
|
||||||
/// ImplSource identifying a particular impl.
|
/// ImplSource identifying a particular impl.
|
||||||
@ -704,7 +697,7 @@ impl<'tcx, N> ImplSource<'tcx, N> {
|
|||||||
/// is `Obligation`, as one might expect. During codegen, however, this
|
/// is `Obligation`, as one might expect. During codegen, however, this
|
||||||
/// is `()`, because codegen only requires a shallow resolution of an
|
/// is `()`, because codegen only requires a shallow resolution of an
|
||||||
/// impl, and nested obligations are satisfied later.
|
/// impl, and nested obligations are satisfied later.
|
||||||
#[derive(Clone, PartialEq, Eq, TyEncodable, TyDecodable, HashStable, Lift)]
|
#[derive(Clone, PartialEq, Eq, TyEncodable, TyDecodable, HashStable)]
|
||||||
#[derive(TypeFoldable, TypeVisitable)]
|
#[derive(TypeFoldable, TypeVisitable)]
|
||||||
pub struct ImplSourceUserDefinedData<'tcx, N> {
|
pub struct ImplSourceUserDefinedData<'tcx, N> {
|
||||||
pub impl_def_id: DefId,
|
pub impl_def_id: DefId,
|
||||||
@ -736,7 +729,7 @@ pub enum BuiltinImplSource {
|
|||||||
TupleUnsizing,
|
TupleUnsizing,
|
||||||
}
|
}
|
||||||
|
|
||||||
TrivialTypeTraversalAndLiftImpls! { BuiltinImplSource }
|
TrivialTypeTraversalImpls! { BuiltinImplSource }
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, Eq, Hash, HashStable, PartialOrd, Ord)]
|
#[derive(Clone, Debug, PartialEq, Eq, Hash, HashStable, PartialOrd, Ord)]
|
||||||
pub enum ObjectSafetyViolation {
|
pub enum ObjectSafetyViolation {
|
||||||
|
@ -17,8 +17,7 @@ pub mod type_op {
|
|||||||
use crate::ty::{Predicate, Ty, TyCtxt, UserType};
|
use crate::ty::{Predicate, Ty, TyCtxt, UserType};
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, HashStable, Lift)]
|
#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, HashStable, TypeFoldable, TypeVisitable)]
|
||||||
#[derive(TypeFoldable, TypeVisitable)]
|
|
||||||
pub struct AscribeUserType<'tcx> {
|
pub struct AscribeUserType<'tcx> {
|
||||||
pub mir_ty: Ty<'tcx>,
|
pub mir_ty: Ty<'tcx>,
|
||||||
pub user_ty: UserType<'tcx>,
|
pub user_ty: UserType<'tcx>,
|
||||||
@ -30,22 +29,19 @@ pub mod type_op {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, HashStable, Lift)]
|
#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, HashStable, TypeFoldable, TypeVisitable)]
|
||||||
#[derive(TypeFoldable, TypeVisitable)]
|
|
||||||
pub struct Eq<'tcx> {
|
pub struct Eq<'tcx> {
|
||||||
pub a: Ty<'tcx>,
|
pub a: Ty<'tcx>,
|
||||||
pub b: Ty<'tcx>,
|
pub b: Ty<'tcx>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, HashStable, Lift)]
|
#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, HashStable, TypeFoldable, TypeVisitable)]
|
||||||
#[derive(TypeFoldable, TypeVisitable)]
|
|
||||||
pub struct Subtype<'tcx> {
|
pub struct Subtype<'tcx> {
|
||||||
pub sub: Ty<'tcx>,
|
pub sub: Ty<'tcx>,
|
||||||
pub sup: Ty<'tcx>,
|
pub sup: Ty<'tcx>,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, HashStable, Lift)]
|
#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, HashStable, TypeFoldable, TypeVisitable)]
|
||||||
#[derive(TypeFoldable, TypeVisitable)]
|
|
||||||
pub struct ProvePredicate<'tcx> {
|
pub struct ProvePredicate<'tcx> {
|
||||||
pub predicate: Predicate<'tcx>,
|
pub predicate: Predicate<'tcx>,
|
||||||
}
|
}
|
||||||
@ -56,8 +52,7 @@ pub mod type_op {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, HashStable, Lift)]
|
#[derive(Copy, Clone, Debug, Hash, PartialEq, Eq, HashStable, TypeFoldable, TypeVisitable)]
|
||||||
#[derive(TypeFoldable, TypeVisitable)]
|
|
||||||
pub struct Normalize<T> {
|
pub struct Normalize<T> {
|
||||||
pub value: T,
|
pub value: T,
|
||||||
}
|
}
|
||||||
@ -101,7 +96,7 @@ impl<'tcx> From<TypeError<'tcx>> for NoSolution {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, Default, HashStable, TypeFoldable, TypeVisitable, Lift)]
|
#[derive(Clone, Debug, Default, HashStable, TypeFoldable, TypeVisitable)]
|
||||||
pub struct DropckOutlivesResult<'tcx> {
|
pub struct DropckOutlivesResult<'tcx> {
|
||||||
pub kinds: Vec<GenericArg<'tcx>>,
|
pub kinds: Vec<GenericArg<'tcx>>,
|
||||||
pub overflows: Vec<Ty<'tcx>>,
|
pub overflows: Vec<Ty<'tcx>>,
|
||||||
@ -194,7 +189,7 @@ pub struct MethodAutoderefBadTy<'tcx> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Result from the `normalize_projection_ty` query.
|
/// Result from the `normalize_projection_ty` query.
|
||||||
#[derive(Clone, Debug, HashStable, TypeFoldable, TypeVisitable, Lift)]
|
#[derive(Clone, Debug, HashStable, TypeFoldable, TypeVisitable)]
|
||||||
pub struct NormalizationResult<'tcx> {
|
pub struct NormalizationResult<'tcx> {
|
||||||
/// Result of normalization.
|
/// Result of normalization.
|
||||||
pub normalized_ty: Ty<'tcx>,
|
pub normalized_ty: Ty<'tcx>,
|
||||||
@ -207,7 +202,7 @@ pub struct NormalizationResult<'tcx> {
|
|||||||
/// case they are called implied bounds). They are fed to the
|
/// case they are called implied bounds). They are fed to the
|
||||||
/// `OutlivesEnv` which in turn is supplied to the region checker and
|
/// `OutlivesEnv` which in turn is supplied to the region checker and
|
||||||
/// other parts of the inference system.
|
/// other parts of the inference system.
|
||||||
#[derive(Clone, Debug, TypeFoldable, TypeVisitable, Lift, HashStable)]
|
#[derive(Clone, Debug, TypeFoldable, TypeVisitable, HashStable)]
|
||||||
pub enum OutlivesBound<'tcx> {
|
pub enum OutlivesBound<'tcx> {
|
||||||
RegionSubRegion(ty::Region<'tcx>, ty::Region<'tcx>),
|
RegionSubRegion(ty::Region<'tcx>, ty::Region<'tcx>),
|
||||||
RegionSubParam(ty::Region<'tcx>, ty::ParamTy),
|
RegionSubParam(ty::Region<'tcx>, ty::ParamTy),
|
||||||
|
@ -305,7 +305,7 @@ impl From<ErrorGuaranteed> for OverflowError {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TrivialTypeTraversalAndLiftImpls! { OverflowError }
|
TrivialTypeTraversalImpls! { OverflowError }
|
||||||
|
|
||||||
impl<'tcx> From<OverflowError> for SelectionError<'tcx> {
|
impl<'tcx> From<OverflowError> for SelectionError<'tcx> {
|
||||||
fn from(overflow_error: OverflowError) -> SelectionError<'tcx> {
|
fn from(overflow_error: OverflowError) -> SelectionError<'tcx> {
|
||||||
|
@ -27,7 +27,7 @@ impl From<ErrorGuaranteed> for NotConstEvaluatable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TrivialTypeTraversalAndLiftImpls! { NotConstEvaluatable }
|
TrivialTypeTraversalImpls! { NotConstEvaluatable }
|
||||||
|
|
||||||
pub type BoundAbstractConst<'tcx> = Result<Option<EarlyBinder<ty::Const<'tcx>>>, ErrorGuaranteed>;
|
pub type BoundAbstractConst<'tcx> = Result<Option<EarlyBinder<ty::Const<'tcx>>>, ErrorGuaranteed>;
|
||||||
|
|
||||||
|
@ -76,7 +76,7 @@ pub enum PointerCoercion {
|
|||||||
/// At some point, of course, `Box` should move out of the compiler, in which
|
/// At some point, of course, `Box` should move out of the compiler, in which
|
||||||
/// case this is analogous to transforming a struct. E.g., `Box<[i32; 4]>` ->
|
/// case this is analogous to transforming a struct. E.g., `Box<[i32; 4]>` ->
|
||||||
/// `Box<[i32]>` is an `Adjust::Unsize` with the target `Box<[i32]>`.
|
/// `Box<[i32]>` is an `Adjust::Unsize` with the target `Box<[i32]>`.
|
||||||
#[derive(Clone, TyEncodable, TyDecodable, HashStable, TypeFoldable, TypeVisitable, Lift)]
|
#[derive(Clone, TyEncodable, TyDecodable, HashStable, TypeFoldable, TypeVisitable)]
|
||||||
pub struct Adjustment<'tcx> {
|
pub struct Adjustment<'tcx> {
|
||||||
pub kind: Adjust<'tcx>,
|
pub kind: Adjust<'tcx>,
|
||||||
pub target: Ty<'tcx>,
|
pub target: Ty<'tcx>,
|
||||||
@ -88,7 +88,7 @@ impl<'tcx> Adjustment<'tcx> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone, Debug, TyEncodable, TyDecodable, HashStable, TypeFoldable, TypeVisitable, Lift)]
|
#[derive(Clone, Debug, TyEncodable, TyDecodable, HashStable, TypeFoldable, TypeVisitable)]
|
||||||
pub enum Adjust<'tcx> {
|
pub enum Adjust<'tcx> {
|
||||||
/// Go from ! to any type.
|
/// Go from ! to any type.
|
||||||
NeverToAny,
|
NeverToAny,
|
||||||
@ -110,7 +110,7 @@ pub enum Adjust<'tcx> {
|
|||||||
/// The target type is `U` in both cases, with the region and mutability
|
/// The target type is `U` in both cases, with the region and mutability
|
||||||
/// being those shared by both the receiver and the returned reference.
|
/// being those shared by both the receiver and the returned reference.
|
||||||
#[derive(Copy, Clone, PartialEq, Debug, TyEncodable, TyDecodable, HashStable)]
|
#[derive(Copy, Clone, PartialEq, Debug, TyEncodable, TyDecodable, HashStable)]
|
||||||
#[derive(TypeFoldable, TypeVisitable, Lift)]
|
#[derive(TypeFoldable, TypeVisitable)]
|
||||||
pub struct OverloadedDeref<'tcx> {
|
pub struct OverloadedDeref<'tcx> {
|
||||||
pub region: ty::Region<'tcx>,
|
pub region: ty::Region<'tcx>,
|
||||||
pub mutbl: hir::Mutability,
|
pub mutbl: hir::Mutability,
|
||||||
@ -182,7 +182,7 @@ impl From<AutoBorrowMutability> for hir::Mutability {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, PartialEq, Debug, TyEncodable, TyDecodable, HashStable)]
|
#[derive(Copy, Clone, PartialEq, Debug, TyEncodable, TyDecodable, HashStable)]
|
||||||
#[derive(TypeFoldable, TypeVisitable, Lift)]
|
#[derive(TypeFoldable, TypeVisitable)]
|
||||||
pub enum AutoBorrow<'tcx> {
|
pub enum AutoBorrow<'tcx> {
|
||||||
/// Converts from T to &T.
|
/// Converts from T to &T.
|
||||||
Ref(ty::Region<'tcx>, AutoBorrowMutability),
|
Ref(ty::Region<'tcx>, AutoBorrowMutability),
|
||||||
|
@ -6,7 +6,7 @@ pub enum BindingMode {
|
|||||||
BindByValue(Mutability),
|
BindByValue(Mutability),
|
||||||
}
|
}
|
||||||
|
|
||||||
TrivialTypeTraversalAndLiftImpls! { BindingMode }
|
TrivialTypeTraversalImpls! { BindingMode }
|
||||||
|
|
||||||
impl BindingMode {
|
impl BindingMode {
|
||||||
pub fn convert(BindingAnnotation(by_ref, mutbl): BindingAnnotation) -> BindingMode {
|
pub fn convert(BindingAnnotation(by_ref, mutbl): BindingAnnotation) -> BindingMode {
|
||||||
|
@ -8,7 +8,7 @@ use rustc_hir::def_id::DefId;
|
|||||||
use rustc_macros::HashStable;
|
use rustc_macros::HashStable;
|
||||||
|
|
||||||
/// An unevaluated (potentially generic) constant used in the type-system.
|
/// An unevaluated (potentially generic) constant used in the type-system.
|
||||||
#[derive(Copy, Clone, Eq, PartialEq, PartialOrd, Ord, TyEncodable, TyDecodable, Lift)]
|
#[derive(Copy, Clone, Eq, PartialEq, PartialOrd, Ord, TyEncodable, TyDecodable)]
|
||||||
#[derive(Hash, HashStable, TypeFoldable, TypeVisitable)]
|
#[derive(Hash, HashStable, TypeFoldable, TypeVisitable)]
|
||||||
pub struct UnevaluatedConst<'tcx> {
|
pub struct UnevaluatedConst<'tcx> {
|
||||||
pub def: DefId,
|
pub def: DefId,
|
||||||
|
@ -50,7 +50,7 @@ use rustc_hir::def_id::{CrateNum, DefId, LocalDefId, LOCAL_CRATE};
|
|||||||
use rustc_hir::definitions::Definitions;
|
use rustc_hir::definitions::Definitions;
|
||||||
use rustc_hir::intravisit::Visitor;
|
use rustc_hir::intravisit::Visitor;
|
||||||
use rustc_hir::lang_items::LangItem;
|
use rustc_hir::lang_items::LangItem;
|
||||||
use rustc_hir::{Constness, HirId, Node, TraitCandidate};
|
use rustc_hir::{HirId, Node, TraitCandidate};
|
||||||
use rustc_index::IndexVec;
|
use rustc_index::IndexVec;
|
||||||
use rustc_macros::HashStable;
|
use rustc_macros::HashStable;
|
||||||
use rustc_query_system::dep_graph::DepNodeIndex;
|
use rustc_query_system::dep_graph::DepNodeIndex;
|
||||||
@ -1251,19 +1251,13 @@ nop_lift! {predicate; Clause<'a> => Clause<'tcx>}
|
|||||||
|
|
||||||
nop_list_lift! {type_lists; Ty<'a> => Ty<'tcx>}
|
nop_list_lift! {type_lists; Ty<'a> => Ty<'tcx>}
|
||||||
nop_list_lift! {poly_existential_predicates; PolyExistentialPredicate<'a> => PolyExistentialPredicate<'tcx>}
|
nop_list_lift! {poly_existential_predicates; PolyExistentialPredicate<'a> => PolyExistentialPredicate<'tcx>}
|
||||||
nop_list_lift! {clauses; Clause<'a> => Clause<'tcx>}
|
|
||||||
nop_list_lift! {canonical_var_infos; CanonicalVarInfo<'a> => CanonicalVarInfo<'tcx>}
|
|
||||||
nop_list_lift! {projs; ProjectionKind => ProjectionKind}
|
|
||||||
nop_list_lift! {bound_variable_kinds; ty::BoundVariableKind => ty::BoundVariableKind}
|
nop_list_lift! {bound_variable_kinds; ty::BoundVariableKind => ty::BoundVariableKind}
|
||||||
|
|
||||||
// This is the impl for `&'a GenericArgs<'a>`.
|
// This is the impl for `&'a GenericArgs<'a>`.
|
||||||
nop_list_lift! {args; GenericArg<'a> => GenericArg<'tcx>}
|
nop_list_lift! {args; GenericArg<'a> => GenericArg<'tcx>}
|
||||||
|
|
||||||
CloneLiftImpls! {
|
TrivialLiftImpls! {
|
||||||
Constness,
|
|
||||||
traits::WellFormedLoc,
|
|
||||||
ImplPolarity,
|
ImplPolarity,
|
||||||
crate::mir::ReturnConstraint,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
macro_rules! sty_debug_print {
|
macro_rules! sty_debug_print {
|
||||||
|
@ -11,7 +11,7 @@ use std::collections::hash_map::DefaultHasher;
|
|||||||
use std::hash::{Hash, Hasher};
|
use std::hash::{Hash, Hasher};
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, TypeFoldable, TypeVisitable, Lift)]
|
#[derive(Clone, Copy, Debug, PartialEq, Eq, TypeFoldable, TypeVisitable)]
|
||||||
pub struct ExpectedFound<T> {
|
pub struct ExpectedFound<T> {
|
||||||
pub expected: T,
|
pub expected: T,
|
||||||
pub found: T,
|
pub found: T,
|
||||||
@ -28,7 +28,7 @@ impl<T> ExpectedFound<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Data structures used in type unification
|
// Data structures used in type unification
|
||||||
#[derive(Copy, Clone, Debug, TypeVisitable, Lift, PartialEq, Eq)]
|
#[derive(Copy, Clone, Debug, TypeVisitable, PartialEq, Eq)]
|
||||||
#[rustc_pass_by_value]
|
#[rustc_pass_by_value]
|
||||||
pub enum TypeError<'tcx> {
|
pub enum TypeError<'tcx> {
|
||||||
Mismatch,
|
Mismatch,
|
||||||
|
@ -1029,7 +1029,7 @@ impl<'a, 'tcx> ArgFolder<'a, 'tcx> {
|
|||||||
/// Stores the user-given args to reach some fully qualified path
|
/// Stores the user-given args to reach some fully qualified path
|
||||||
/// (e.g., `<T>::Item` or `<T as Trait>::Item`).
|
/// (e.g., `<T>::Item` or `<T as Trait>::Item`).
|
||||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, TyEncodable, TyDecodable)]
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, TyEncodable, TyDecodable)]
|
||||||
#[derive(HashStable, TypeFoldable, TypeVisitable, Lift)]
|
#[derive(HashStable, TypeFoldable, TypeVisitable)]
|
||||||
pub struct UserArgs<'tcx> {
|
pub struct UserArgs<'tcx> {
|
||||||
/// The args for the item as given by the user.
|
/// The args for the item as given by the user.
|
||||||
pub args: GenericArgsRef<'tcx>,
|
pub args: GenericArgsRef<'tcx>,
|
||||||
@ -1056,7 +1056,7 @@ pub struct UserArgs<'tcx> {
|
|||||||
/// the self type, giving `Foo<?A>`. Finally, we unify that with
|
/// the self type, giving `Foo<?A>`. Finally, we unify that with
|
||||||
/// the self type here, which contains `?A` to be `&'static u32`
|
/// the self type here, which contains `?A` to be `&'static u32`
|
||||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, TyEncodable, TyDecodable)]
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, TyEncodable, TyDecodable)]
|
||||||
#[derive(HashStable, TypeFoldable, TypeVisitable, Lift)]
|
#[derive(HashStable, TypeFoldable, TypeVisitable)]
|
||||||
pub struct UserSelfTy<'tcx> {
|
pub struct UserSelfTy<'tcx> {
|
||||||
pub impl_def_id: DefId,
|
pub impl_def_id: DefId,
|
||||||
pub self_ty: Ty<'tcx>,
|
pub self_ty: Ty<'tcx>,
|
||||||
|
@ -18,6 +18,9 @@ use std::fmt;
|
|||||||
/// Monomorphization happens on-the-fly and no monomorphized MIR is ever created. Instead, this type
|
/// Monomorphization happens on-the-fly and no monomorphized MIR is ever created. Instead, this type
|
||||||
/// simply couples a potentially generic `InstanceDef` with some args, and codegen and const eval
|
/// simply couples a potentially generic `InstanceDef` with some args, and codegen and const eval
|
||||||
/// will do all required substitution as they run.
|
/// will do all required substitution as they run.
|
||||||
|
///
|
||||||
|
/// Note: the `Lift` impl is currently not used by rustc, but is used by
|
||||||
|
/// rustc_codegen_cranelift when the `jit` feature is enabled.
|
||||||
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug, TyEncodable, TyDecodable)]
|
#[derive(Copy, Clone, PartialEq, Eq, Hash, Debug, TyEncodable, TyDecodable)]
|
||||||
#[derive(HashStable, Lift, TypeFoldable, TypeVisitable)]
|
#[derive(HashStable, Lift, TypeFoldable, TypeVisitable)]
|
||||||
pub struct Instance<'tcx> {
|
pub struct Instance<'tcx> {
|
||||||
|
@ -1510,7 +1510,7 @@ impl<'a, 'tcx> IntoIterator for &'a InstantiatedPredicates<'tcx> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, HashStable, TyEncodable, TyDecodable, Lift)]
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, HashStable, TyEncodable, TyDecodable)]
|
||||||
#[derive(TypeFoldable, TypeVisitable)]
|
#[derive(TypeFoldable, TypeVisitable)]
|
||||||
pub struct OpaqueTypeKey<'tcx> {
|
pub struct OpaqueTypeKey<'tcx> {
|
||||||
pub def_id: LocalDefId,
|
pub def_id: LocalDefId,
|
||||||
@ -1793,7 +1793,7 @@ impl<'tcx> ParamEnv<'tcx> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, TypeFoldable, TypeVisitable)]
|
#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash, TypeFoldable, TypeVisitable)]
|
||||||
#[derive(HashStable, Lift)]
|
#[derive(HashStable)]
|
||||||
pub struct ParamEnvAnd<'tcx, T> {
|
pub struct ParamEnvAnd<'tcx, T> {
|
||||||
pub param_env: ParamEnv<'tcx>,
|
pub param_env: ParamEnv<'tcx>,
|
||||||
pub value: T,
|
pub value: T,
|
||||||
|
@ -136,10 +136,8 @@ define_helper!(
|
|||||||
///
|
///
|
||||||
/// Regions not selected by the region highlight mode are presently
|
/// Regions not selected by the region highlight mode are presently
|
||||||
/// unaffected.
|
/// unaffected.
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone, Default)]
|
||||||
pub struct RegionHighlightMode<'tcx> {
|
pub struct RegionHighlightMode<'tcx> {
|
||||||
tcx: TyCtxt<'tcx>,
|
|
||||||
|
|
||||||
/// If enabled, when we see the selected region, use "`'N`"
|
/// If enabled, when we see the selected region, use "`'N`"
|
||||||
/// instead of the ordinary behavior.
|
/// instead of the ordinary behavior.
|
||||||
highlight_regions: [Option<(ty::Region<'tcx>, usize)>; 3],
|
highlight_regions: [Option<(ty::Region<'tcx>, usize)>; 3],
|
||||||
@ -155,14 +153,6 @@ pub struct RegionHighlightMode<'tcx> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx> RegionHighlightMode<'tcx> {
|
impl<'tcx> RegionHighlightMode<'tcx> {
|
||||||
pub fn new(tcx: TyCtxt<'tcx>) -> Self {
|
|
||||||
Self {
|
|
||||||
tcx,
|
|
||||||
highlight_regions: Default::default(),
|
|
||||||
highlight_bound_region: Default::default(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// If `region` and `number` are both `Some`, invokes
|
/// If `region` and `number` are both `Some`, invokes
|
||||||
/// `highlighting_region`.
|
/// `highlighting_region`.
|
||||||
pub fn maybe_highlighting_region(
|
pub fn maybe_highlighting_region(
|
||||||
@ -188,8 +178,13 @@ impl<'tcx> RegionHighlightMode<'tcx> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Convenience wrapper for `highlighting_region`.
|
/// Convenience wrapper for `highlighting_region`.
|
||||||
pub fn highlighting_region_vid(&mut self, vid: ty::RegionVid, number: usize) {
|
pub fn highlighting_region_vid(
|
||||||
self.highlighting_region(ty::Region::new_var(self.tcx, vid), number)
|
&mut self,
|
||||||
|
tcx: TyCtxt<'tcx>,
|
||||||
|
vid: ty::RegionVid,
|
||||||
|
number: usize,
|
||||||
|
) {
|
||||||
|
self.highlighting_region(ty::Region::new_var(tcx, vid), number)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns `Some(n)` with the number to use for the given region, if any.
|
/// Returns `Some(n)` with the number to use for the given region, if any.
|
||||||
@ -1778,7 +1773,7 @@ impl<'a, 'tcx> FmtPrinter<'a, 'tcx> {
|
|||||||
printed_type_count: 0,
|
printed_type_count: 0,
|
||||||
type_length_limit,
|
type_length_limit,
|
||||||
truncated: false,
|
truncated: false,
|
||||||
region_highlight_mode: RegionHighlightMode::new(tcx),
|
region_highlight_mode: RegionHighlightMode::default(),
|
||||||
ty_infer_name_resolver: None,
|
ty_infer_name_resolver: None,
|
||||||
const_infer_name_resolver: None,
|
const_infer_name_resolver: None,
|
||||||
}))
|
}))
|
||||||
@ -2746,20 +2741,14 @@ forward_display_to_print! {
|
|||||||
|
|
||||||
// HACK(eddyb) these are exhaustive instead of generic,
|
// HACK(eddyb) these are exhaustive instead of generic,
|
||||||
// because `for<'tcx>` isn't possible yet.
|
// because `for<'tcx>` isn't possible yet.
|
||||||
ty::PolyExistentialPredicate<'tcx>,
|
|
||||||
ty::PolyExistentialProjection<'tcx>,
|
ty::PolyExistentialProjection<'tcx>,
|
||||||
ty::PolyExistentialTraitRef<'tcx>,
|
ty::PolyExistentialTraitRef<'tcx>,
|
||||||
ty::Binder<'tcx, ty::TraitRef<'tcx>>,
|
ty::Binder<'tcx, ty::TraitRef<'tcx>>,
|
||||||
ty::Binder<'tcx, TraitRefPrintOnlyTraitPath<'tcx>>,
|
ty::Binder<'tcx, TraitRefPrintOnlyTraitPath<'tcx>>,
|
||||||
ty::Binder<'tcx, TraitRefPrintOnlyTraitName<'tcx>>,
|
|
||||||
ty::Binder<'tcx, ty::FnSig<'tcx>>,
|
ty::Binder<'tcx, ty::FnSig<'tcx>>,
|
||||||
ty::Binder<'tcx, ty::TraitPredicate<'tcx>>,
|
ty::Binder<'tcx, ty::TraitPredicate<'tcx>>,
|
||||||
ty::Binder<'tcx, TraitPredPrintModifiersAndPath<'tcx>>,
|
ty::Binder<'tcx, TraitPredPrintModifiersAndPath<'tcx>>,
|
||||||
ty::Binder<'tcx, ty::SubtypePredicate<'tcx>>,
|
|
||||||
ty::Binder<'tcx, ty::ProjectionPredicate<'tcx>>,
|
ty::Binder<'tcx, ty::ProjectionPredicate<'tcx>>,
|
||||||
ty::Binder<'tcx, ty::OutlivesPredicate<Ty<'tcx>, ty::Region<'tcx>>>,
|
|
||||||
ty::Binder<'tcx, ty::OutlivesPredicate<ty::Region<'tcx>, ty::Region<'tcx>>>,
|
|
||||||
|
|
||||||
ty::OutlivesPredicate<Ty<'tcx>, ty::Region<'tcx>>,
|
ty::OutlivesPredicate<Ty<'tcx>, ty::Region<'tcx>>,
|
||||||
ty::OutlivesPredicate<ty::Region<'tcx>, ty::Region<'tcx>>
|
ty::OutlivesPredicate<ty::Region<'tcx>, ty::Region<'tcx>>
|
||||||
}
|
}
|
||||||
|
@ -9,14 +9,11 @@ use crate::ty::print::{with_no_trimmed_paths, FmtPrinter, Printer};
|
|||||||
use crate::ty::visit::{TypeSuperVisitable, TypeVisitable, TypeVisitor};
|
use crate::ty::visit::{TypeSuperVisitable, TypeVisitable, TypeVisitor};
|
||||||
use crate::ty::{self, AliasTy, InferConst, Lift, Term, TermKind, Ty, TyCtxt};
|
use crate::ty::{self, AliasTy, InferConst, Lift, Term, TermKind, Ty, TyCtxt};
|
||||||
use rustc_hir::def::Namespace;
|
use rustc_hir::def::Namespace;
|
||||||
use rustc_index::{Idx, IndexVec};
|
|
||||||
use rustc_target::abi::TyAndLayout;
|
use rustc_target::abi::TyAndLayout;
|
||||||
use rustc_type_ir::{ConstKind, DebugWithInfcx, InferCtxtLike, OptWithInfcx};
|
use rustc_type_ir::{ConstKind, DebugWithInfcx, InferCtxtLike, OptWithInfcx};
|
||||||
|
|
||||||
use std::fmt::{self, Debug};
|
use std::fmt::{self, Debug};
|
||||||
use std::ops::ControlFlow;
|
use std::ops::ControlFlow;
|
||||||
use std::rc::Rc;
|
|
||||||
use std::sync::Arc;
|
|
||||||
|
|
||||||
use super::print::PrettyPrinter;
|
use super::print::PrettyPrinter;
|
||||||
use super::{GenericArg, GenericArgKind, Region};
|
use super::{GenericArg, GenericArgKind, Region};
|
||||||
@ -456,22 +453,16 @@ impl<'tcx, T: DebugWithInfcx<TyCtxt<'tcx>>> DebugWithInfcx<TyCtxt<'tcx>> for ty:
|
|||||||
|
|
||||||
// For things for which the type library provides traversal implementations
|
// For things for which the type library provides traversal implementations
|
||||||
// for all Interners, we only need to provide a Lift implementation:
|
// for all Interners, we only need to provide a Lift implementation:
|
||||||
CloneLiftImpls! {
|
TrivialLiftImpls! {
|
||||||
(),
|
(),
|
||||||
bool,
|
bool,
|
||||||
usize,
|
usize,
|
||||||
u16,
|
|
||||||
u32,
|
|
||||||
u64,
|
|
||||||
String,
|
|
||||||
rustc_type_ir::DebruijnIndex,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// For things about which the type library does not know, or does not
|
// For some things about which the type library does not know, or does not
|
||||||
// provide any traversal implementations, we need to provide both a Lift
|
// provide any traversal implementations, we need to provide a traversal
|
||||||
// implementation and traversal implementations (the latter only for
|
// implementation (only for TyCtxt<'_> interners).
|
||||||
// TyCtxt<'_> interners).
|
TrivialTypeTraversalImpls! {
|
||||||
TrivialTypeTraversalAndLiftImpls! {
|
|
||||||
::rustc_target::abi::FieldIdx,
|
::rustc_target::abi::FieldIdx,
|
||||||
::rustc_target::abi::VariantIdx,
|
::rustc_target::abi::VariantIdx,
|
||||||
crate::middle::region::Scope,
|
crate::middle::region::Scope,
|
||||||
@ -481,14 +472,10 @@ TrivialTypeTraversalAndLiftImpls! {
|
|||||||
::rustc_ast::NodeId,
|
::rustc_ast::NodeId,
|
||||||
::rustc_span::symbol::Symbol,
|
::rustc_span::symbol::Symbol,
|
||||||
::rustc_hir::def::Res,
|
::rustc_hir::def::Res,
|
||||||
::rustc_hir::def_id::DefId,
|
|
||||||
::rustc_hir::def_id::LocalDefId,
|
::rustc_hir::def_id::LocalDefId,
|
||||||
::rustc_hir::HirId,
|
::rustc_hir::HirId,
|
||||||
::rustc_hir::MatchSource,
|
::rustc_hir::MatchSource,
|
||||||
::rustc_hir::Mutability,
|
|
||||||
::rustc_hir::Unsafety,
|
|
||||||
::rustc_target::asm::InlineAsmRegOrRegClass,
|
::rustc_target::asm::InlineAsmRegOrRegClass,
|
||||||
::rustc_target::spec::abi::Abi,
|
|
||||||
crate::mir::coverage::CounterId,
|
crate::mir::coverage::CounterId,
|
||||||
crate::mir::coverage::ExpressionId,
|
crate::mir::coverage::ExpressionId,
|
||||||
crate::mir::coverage::MappedExpressionIndex,
|
crate::mir::coverage::MappedExpressionIndex,
|
||||||
@ -506,16 +493,12 @@ TrivialTypeTraversalAndLiftImpls! {
|
|||||||
crate::ty::AssocItem,
|
crate::ty::AssocItem,
|
||||||
crate::ty::AssocKind,
|
crate::ty::AssocKind,
|
||||||
crate::ty::AliasKind,
|
crate::ty::AliasKind,
|
||||||
crate::ty::AliasRelationDirection,
|
|
||||||
crate::ty::Placeholder<crate::ty::BoundRegion>,
|
crate::ty::Placeholder<crate::ty::BoundRegion>,
|
||||||
crate::ty::Placeholder<crate::ty::BoundTy>,
|
crate::ty::Placeholder<crate::ty::BoundTy>,
|
||||||
crate::ty::Placeholder<ty::BoundVar>,
|
crate::ty::Placeholder<ty::BoundVar>,
|
||||||
crate::ty::ClosureKind,
|
|
||||||
crate::ty::FreeRegion,
|
crate::ty::FreeRegion,
|
||||||
crate::ty::InferTy,
|
crate::ty::InferTy,
|
||||||
crate::ty::IntVarValue,
|
crate::ty::IntVarValue,
|
||||||
crate::ty::ParamConst,
|
|
||||||
crate::ty::ParamTy,
|
|
||||||
crate::ty::adjustment::PointerCoercion,
|
crate::ty::adjustment::PointerCoercion,
|
||||||
crate::ty::RegionVid,
|
crate::ty::RegionVid,
|
||||||
crate::ty::UniverseIndex,
|
crate::ty::UniverseIndex,
|
||||||
@ -523,33 +506,30 @@ TrivialTypeTraversalAndLiftImpls! {
|
|||||||
::rustc_span::Span,
|
::rustc_span::Span,
|
||||||
::rustc_span::symbol::Ident,
|
::rustc_span::symbol::Ident,
|
||||||
::rustc_errors::ErrorGuaranteed,
|
::rustc_errors::ErrorGuaranteed,
|
||||||
|
ty::BoundVar,
|
||||||
|
ty::ValTree<'tcx>,
|
||||||
|
}
|
||||||
|
// For some things about which the type library does not know, or does not
|
||||||
|
// provide any traversal implementations, we need to provide a traversal
|
||||||
|
// implementation and a lift implementation (the former only for TyCtxt<'_>
|
||||||
|
// interners).
|
||||||
|
TrivialTypeTraversalAndLiftImpls! {
|
||||||
|
::rustc_hir::def_id::DefId,
|
||||||
|
::rustc_hir::Mutability,
|
||||||
|
::rustc_hir::Unsafety,
|
||||||
|
::rustc_target::spec::abi::Abi,
|
||||||
|
crate::ty::AliasRelationDirection,
|
||||||
|
crate::ty::ClosureKind,
|
||||||
|
crate::ty::ParamConst,
|
||||||
|
crate::ty::ParamTy,
|
||||||
interpret::Scalar,
|
interpret::Scalar,
|
||||||
interpret::AllocId,
|
interpret::AllocId,
|
||||||
rustc_target::abi::Size,
|
rustc_target::abi::Size,
|
||||||
ty::BoundVar,
|
|
||||||
}
|
|
||||||
|
|
||||||
TrivialTypeTraversalAndLiftImpls! {
|
|
||||||
ty::ValTree<'tcx>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
// Lift implementations
|
// Lift implementations
|
||||||
|
|
||||||
impl<'tcx, A: Lift<'tcx>, B: Lift<'tcx>> Lift<'tcx> for (A, B) {
|
|
||||||
type Lifted = (A::Lifted, B::Lifted);
|
|
||||||
fn lift_to_tcx(self, tcx: TyCtxt<'tcx>) -> Option<Self::Lifted> {
|
|
||||||
Some((tcx.lift(self.0)?, tcx.lift(self.1)?))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'tcx, A: Lift<'tcx>, B: Lift<'tcx>, C: Lift<'tcx>> Lift<'tcx> for (A, B, C) {
|
|
||||||
type Lifted = (A::Lifted, B::Lifted, C::Lifted);
|
|
||||||
fn lift_to_tcx(self, tcx: TyCtxt<'tcx>) -> Option<Self::Lifted> {
|
|
||||||
Some((tcx.lift(self.0)?, tcx.lift(self.1)?, tcx.lift(self.2)?))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'tcx, T: Lift<'tcx>> Lift<'tcx> for Option<T> {
|
impl<'tcx, T: Lift<'tcx>> Lift<'tcx> for Option<T> {
|
||||||
type Lifted = Option<T::Lifted>;
|
type Lifted = Option<T::Lifted>;
|
||||||
fn lift_to_tcx(self, tcx: TyCtxt<'tcx>) -> Option<Self::Lifted> {
|
fn lift_to_tcx(self, tcx: TyCtxt<'tcx>) -> Option<Self::Lifted> {
|
||||||
@ -560,50 +540,6 @@ impl<'tcx, T: Lift<'tcx>> Lift<'tcx> for Option<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'tcx, T: Lift<'tcx>, E: Lift<'tcx>> Lift<'tcx> for Result<T, E> {
|
|
||||||
type Lifted = Result<T::Lifted, E::Lifted>;
|
|
||||||
fn lift_to_tcx(self, tcx: TyCtxt<'tcx>) -> Option<Self::Lifted> {
|
|
||||||
match self {
|
|
||||||
Ok(x) => tcx.lift(x).map(Ok),
|
|
||||||
Err(e) => tcx.lift(e).map(Err),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'tcx, T: Lift<'tcx>> Lift<'tcx> for Box<T> {
|
|
||||||
type Lifted = Box<T::Lifted>;
|
|
||||||
fn lift_to_tcx(self, tcx: TyCtxt<'tcx>) -> Option<Self::Lifted> {
|
|
||||||
Some(Box::new(tcx.lift(*self)?))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'tcx, T: Lift<'tcx> + Clone> Lift<'tcx> for Rc<T> {
|
|
||||||
type Lifted = Rc<T::Lifted>;
|
|
||||||
fn lift_to_tcx(self, tcx: TyCtxt<'tcx>) -> Option<Self::Lifted> {
|
|
||||||
Some(Rc::new(tcx.lift(self.as_ref().clone())?))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'tcx, T: Lift<'tcx> + Clone> Lift<'tcx> for Arc<T> {
|
|
||||||
type Lifted = Arc<T::Lifted>;
|
|
||||||
fn lift_to_tcx(self, tcx: TyCtxt<'tcx>) -> Option<Self::Lifted> {
|
|
||||||
Some(Arc::new(tcx.lift(self.as_ref().clone())?))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
impl<'tcx, T: Lift<'tcx>> Lift<'tcx> for Vec<T> {
|
|
||||||
type Lifted = Vec<T::Lifted>;
|
|
||||||
fn lift_to_tcx(self, tcx: TyCtxt<'tcx>) -> Option<Self::Lifted> {
|
|
||||||
self.into_iter().map(|v| tcx.lift(v)).collect()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'tcx, I: Idx, T: Lift<'tcx>> Lift<'tcx> for IndexVec<I, T> {
|
|
||||||
type Lifted = IndexVec<I, T::Lifted>;
|
|
||||||
fn lift_to_tcx(self, tcx: TyCtxt<'tcx>) -> Option<Self::Lifted> {
|
|
||||||
self.into_iter().map(|e| tcx.lift(e)).collect()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a, 'tcx> Lift<'tcx> for Term<'a> {
|
impl<'a, 'tcx> Lift<'tcx> for Term<'a> {
|
||||||
type Lifted = ty::Term<'tcx>;
|
type Lifted = ty::Term<'tcx>;
|
||||||
fn lift_to_tcx(self, tcx: TyCtxt<'tcx>) -> Option<Self::Lifted> {
|
fn lift_to_tcx(self, tcx: TyCtxt<'tcx>) -> Option<Self::Lifted> {
|
||||||
@ -616,13 +552,6 @@ impl<'a, 'tcx> Lift<'tcx> for Term<'a> {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
impl<'a, 'tcx> Lift<'tcx> for ty::ParamEnv<'a> {
|
|
||||||
type Lifted = ty::ParamEnv<'tcx>;
|
|
||||||
fn lift_to_tcx(self, tcx: TyCtxt<'tcx>) -> Option<Self::Lifted> {
|
|
||||||
tcx.lift(self.caller_bounds())
|
|
||||||
.map(|caller_bounds| ty::ParamEnv::new(caller_bounds, self.reveal()))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
// Traversal implementations.
|
// Traversal implementations.
|
||||||
|
@ -351,7 +351,7 @@ impl<'tcx> ClosureArgs<'tcx> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Similar to `ClosureArgs`; see the above documentation for more.
|
/// Similar to `ClosureArgs`; see the above documentation for more.
|
||||||
#[derive(Copy, Clone, PartialEq, Eq, Debug, TypeFoldable, TypeVisitable, Lift)]
|
#[derive(Copy, Clone, PartialEq, Eq, Debug, TypeFoldable, TypeVisitable)]
|
||||||
pub struct GeneratorArgs<'tcx> {
|
pub struct GeneratorArgs<'tcx> {
|
||||||
pub args: GenericArgsRef<'tcx>,
|
pub args: GenericArgsRef<'tcx>,
|
||||||
}
|
}
|
||||||
@ -1305,7 +1305,7 @@ impl<'tcx> AliasTy<'tcx> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, TypeFoldable, TypeVisitable, Lift)]
|
#[derive(Copy, Clone, Debug, TypeFoldable, TypeVisitable)]
|
||||||
pub struct GenSig<'tcx> {
|
pub struct GenSig<'tcx> {
|
||||||
pub resume_ty: Ty<'tcx>,
|
pub resume_ty: Ty<'tcx>,
|
||||||
pub yield_ty: Ty<'tcx>,
|
pub yield_ty: Ty<'tcx>,
|
||||||
|
@ -654,7 +654,7 @@ rustc_index::newtype_index! {
|
|||||||
pub type CanonicalUserTypeAnnotations<'tcx> =
|
pub type CanonicalUserTypeAnnotations<'tcx> =
|
||||||
IndexVec<UserTypeAnnotationIndex, CanonicalUserTypeAnnotation<'tcx>>;
|
IndexVec<UserTypeAnnotationIndex, CanonicalUserTypeAnnotation<'tcx>>;
|
||||||
|
|
||||||
#[derive(Clone, Debug, TyEncodable, TyDecodable, HashStable, TypeFoldable, TypeVisitable, Lift)]
|
#[derive(Clone, Debug, TyEncodable, TyDecodable, HashStable, TypeFoldable, TypeVisitable)]
|
||||||
pub struct CanonicalUserTypeAnnotation<'tcx> {
|
pub struct CanonicalUserTypeAnnotation<'tcx> {
|
||||||
pub user_ty: Box<CanonicalUserType<'tcx>>,
|
pub user_ty: Box<CanonicalUserType<'tcx>>,
|
||||||
pub span: Span,
|
pub span: Span,
|
||||||
@ -714,7 +714,7 @@ impl<'tcx> CanonicalUserType<'tcx> {
|
|||||||
/// from constants that are named via paths, like `Foo::<A>::new` and
|
/// from constants that are named via paths, like `Foo::<A>::new` and
|
||||||
/// so forth.
|
/// so forth.
|
||||||
#[derive(Copy, Clone, Debug, PartialEq, TyEncodable, TyDecodable)]
|
#[derive(Copy, Clone, Debug, PartialEq, TyEncodable, TyDecodable)]
|
||||||
#[derive(Eq, Hash, HashStable, TypeFoldable, TypeVisitable, Lift)]
|
#[derive(Eq, Hash, HashStable, TypeFoldable, TypeVisitable)]
|
||||||
pub enum UserType<'tcx> {
|
pub enum UserType<'tcx> {
|
||||||
Ty(Ty<'tcx>),
|
Ty(Ty<'tcx>),
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ use rustc_span::def_id::CRATE_DEF_ID;
|
|||||||
use rustc_span::source_map::DUMMY_SP;
|
use rustc_span::source_map::DUMMY_SP;
|
||||||
use smallvec::{smallvec, SmallVec};
|
use smallvec::{smallvec, SmallVec};
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, HashStable, TypeFoldable, TypeVisitable, Lift)]
|
#[derive(Copy, Clone, Debug, HashStable, TypeFoldable, TypeVisitable)]
|
||||||
pub struct ImpliedOutlivesBounds<'tcx> {
|
pub struct ImpliedOutlivesBounds<'tcx> {
|
||||||
pub ty: Ty<'tcx>,
|
pub ty: Ty<'tcx>,
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,7 @@ use crate::traits::ObligationCtxt;
|
|||||||
use rustc_middle::traits::query::{DropckOutlivesResult, NoSolution};
|
use rustc_middle::traits::query::{DropckOutlivesResult, NoSolution};
|
||||||
use rustc_middle::ty::{ParamEnvAnd, Ty, TyCtxt};
|
use rustc_middle::ty::{ParamEnvAnd, Ty, TyCtxt};
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug, HashStable, TypeFoldable, TypeVisitable, Lift)]
|
#[derive(Copy, Clone, Debug, HashStable, TypeFoldable, TypeVisitable)]
|
||||||
pub struct DropckOutlives<'tcx> {
|
pub struct DropckOutlives<'tcx> {
|
||||||
dropped_ty: Ty<'tcx>,
|
dropped_ty: Ty<'tcx>,
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user