Fix Stable
trait and its impls to work with the new with_tables
This commit is contained in:
parent
06a9dbe5e8
commit
61361c16aa
9 changed files with 173 additions and 132 deletions
|
@ -195,7 +195,7 @@ impl<'tcx> ConstValue<'tcx> {
|
|||
/// Constants
|
||||
|
||||
#[derive(Clone, Copy, PartialEq, Eq, TyEncodable, TyDecodable, Hash, HashStable, Debug)]
|
||||
#[derive(TypeFoldable, TypeVisitable)]
|
||||
#[derive(TypeFoldable, TypeVisitable, Lift)]
|
||||
pub enum Const<'tcx> {
|
||||
/// This constant came from the type system.
|
||||
///
|
||||
|
@ -456,7 +456,7 @@ impl<'tcx> Const<'tcx> {
|
|||
|
||||
/// An unevaluated (potentially generic) constant used in MIR.
|
||||
#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord, TyEncodable, TyDecodable)]
|
||||
#[derive(Hash, HashStable, TypeFoldable, TypeVisitable)]
|
||||
#[derive(Hash, HashStable, TypeFoldable, TypeVisitable, Lift)]
|
||||
pub struct UnevaluatedConst<'tcx> {
|
||||
pub def: DefId,
|
||||
pub args: GenericArgsRef<'tcx>,
|
||||
|
|
|
@ -1416,6 +1416,7 @@ nop_lift! {const_; Const<'a> => Const<'tcx>}
|
|||
nop_lift! {const_allocation; ConstAllocation<'a> => ConstAllocation<'tcx>}
|
||||
nop_lift! {predicate; Predicate<'a> => Predicate<'tcx>}
|
||||
nop_lift! {predicate; Clause<'a> => Clause<'tcx>}
|
||||
nop_lift! {layout; Layout<'a> => Layout<'tcx>}
|
||||
|
||||
nop_list_lift! {type_lists; Ty<'a> => Ty<'tcx>}
|
||||
nop_list_lift! {poly_existential_predicates; PolyExistentialPredicate<'a> => PolyExistentialPredicate<'tcx>}
|
||||
|
@ -1424,8 +1425,28 @@ nop_list_lift! {bound_variable_kinds; ty::BoundVariableKind => ty::BoundVariable
|
|||
// This is the impl for `&'a GenericArgs<'a>`.
|
||||
nop_list_lift! {args; GenericArg<'a> => GenericArg<'tcx>}
|
||||
|
||||
macro_rules! nop_slice_lift {
|
||||
($ty:ty => $lifted:ty) => {
|
||||
impl<'a, 'tcx> Lift<'tcx> for &'a [$ty] {
|
||||
type Lifted = &'tcx [$lifted];
|
||||
fn lift_to_tcx(self, tcx: TyCtxt<'tcx>) -> Option<Self::Lifted> {
|
||||
if self.is_empty() {
|
||||
return Some(&[]);
|
||||
}
|
||||
tcx.interners
|
||||
.arena
|
||||
.dropless
|
||||
.contains_slice(self)
|
||||
.then(|| unsafe { mem::transmute(self) })
|
||||
}
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
nop_slice_lift! {ty::ValTree<'a> => ty::ValTree<'tcx>}
|
||||
|
||||
TrivialLiftImpls! {
|
||||
ImplPolarity,
|
||||
ImplPolarity, Promoted
|
||||
}
|
||||
|
||||
macro_rules! sty_debug_print {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue