Move around constants' Stable
impls a bit
This commit is contained in:
parent
7659abc63d
commit
9b8e3eb8f7
@ -1083,8 +1083,21 @@ impl<'tcx> Stable<'tcx> for ty::Const<'tcx> {
|
||||
type T = stable_mir::ty::Const;
|
||||
|
||||
fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T {
|
||||
let cnst = ConstantKind::from_const(*self, tables.tcx);
|
||||
stable_mir::ty::Const { literal: cnst.stable(tables) }
|
||||
stable_mir::ty::Const {
|
||||
literal: match self.kind() {
|
||||
ty::Value(val) => {
|
||||
let const_val = tables.tcx.valtree_to_const_val((self.ty(), val));
|
||||
stable_mir::ty::ConstantKind::Allocated(new_allocation(
|
||||
self.ty(),
|
||||
const_val,
|
||||
tables,
|
||||
))
|
||||
}
|
||||
ty::ParamCt(param) => stable_mir::ty::ConstantKind::ParamCt(opaque(¶m)),
|
||||
ty::ErrorCt(_) => unreachable!(),
|
||||
_ => unimplemented!(),
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1155,26 +1168,18 @@ impl<'tcx> Stable<'tcx> for rustc_middle::mir::ConstantKind<'tcx> {
|
||||
type T = stable_mir::ty::ConstantKind;
|
||||
|
||||
fn stable(&self, tables: &mut Tables<'tcx>) -> Self::T {
|
||||
match self {
|
||||
ConstantKind::Ty(c) => match c.kind() {
|
||||
ty::Value(val) => {
|
||||
let const_val = tables.tcx.valtree_to_const_val((c.ty(), val));
|
||||
stable_mir::ty::ConstantKind::Allocated(new_allocation(self, const_val, tables))
|
||||
}
|
||||
ty::ParamCt(param) => stable_mir::ty::ConstantKind::ParamCt(opaque(¶m)),
|
||||
ty::ErrorCt(_) => unreachable!(),
|
||||
_ => unimplemented!(),
|
||||
},
|
||||
match *self {
|
||||
ConstantKind::Ty(c) => c.stable(tables).literal,
|
||||
ConstantKind::Unevaluated(unev_const, ty) => {
|
||||
stable_mir::ty::ConstantKind::Unevaluated(stable_mir::ty::UnevaluatedConst {
|
||||
ty: tables.intern_ty(*ty),
|
||||
ty: tables.intern_ty(ty),
|
||||
def: tables.const_def(unev_const.def),
|
||||
args: unev_const.args.stable(tables),
|
||||
promoted: unev_const.promoted.map(|u| u.as_u32()),
|
||||
})
|
||||
}
|
||||
ConstantKind::Val(val, _) => {
|
||||
stable_mir::ty::ConstantKind::Allocated(new_allocation(self, *val, tables))
|
||||
ConstantKind::Val(val, ty) => {
|
||||
stable_mir::ty::ConstantKind::Allocated(new_allocation(ty, val, tables))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -301,8 +301,9 @@ impl Allocation {
|
||||
// We need this method instead of a Stable implementation
|
||||
// because we need to get `Ty` of the const we are trying to create, to do that
|
||||
// we need to have access to `ConstantKind` but we can't access that inside Stable impl.
|
||||
#[allow(rustc::usage_of_qualified_ty)]
|
||||
pub fn new_allocation<'tcx>(
|
||||
const_kind: &rustc_middle::mir::ConstantKind<'tcx>,
|
||||
ty: rustc_middle::ty::Ty<'tcx>,
|
||||
const_value: ConstValue<'tcx>,
|
||||
tables: &mut Tables<'tcx>,
|
||||
) -> Allocation {
|
||||
@ -311,7 +312,7 @@ pub fn new_allocation<'tcx>(
|
||||
let size = scalar.size();
|
||||
let align = tables
|
||||
.tcx
|
||||
.layout_of(rustc_middle::ty::ParamEnv::reveal_all().and(const_kind.ty()))
|
||||
.layout_of(rustc_middle::ty::ParamEnv::reveal_all().and(ty))
|
||||
.unwrap()
|
||||
.align;
|
||||
let mut allocation = rustc_middle::mir::interpret::Allocation::uninit(size, align.abi);
|
||||
@ -321,11 +322,8 @@ pub fn new_allocation<'tcx>(
|
||||
allocation.stable(tables)
|
||||
}
|
||||
ConstValue::ZeroSized => {
|
||||
let align = tables
|
||||
.tcx
|
||||
.layout_of(rustc_middle::ty::ParamEnv::empty().and(const_kind.ty()))
|
||||
.unwrap()
|
||||
.align;
|
||||
let align =
|
||||
tables.tcx.layout_of(rustc_middle::ty::ParamEnv::empty().and(ty)).unwrap().align;
|
||||
Allocation::new_empty_allocation(align.abi)
|
||||
}
|
||||
ConstValue::Slice { data, start, end } => {
|
||||
@ -336,10 +334,8 @@ pub fn new_allocation<'tcx>(
|
||||
(end - start) as u64,
|
||||
&tables.tcx,
|
||||
);
|
||||
let layout = tables
|
||||
.tcx
|
||||
.layout_of(rustc_middle::ty::ParamEnv::reveal_all().and(const_kind.ty()))
|
||||
.unwrap();
|
||||
let layout =
|
||||
tables.tcx.layout_of(rustc_middle::ty::ParamEnv::reveal_all().and(ty)).unwrap();
|
||||
let mut allocation =
|
||||
rustc_middle::mir::interpret::Allocation::uninit(layout.size, layout.align.abi);
|
||||
allocation
|
||||
@ -361,7 +357,7 @@ pub fn new_allocation<'tcx>(
|
||||
ConstValue::ByRef { alloc, offset } => {
|
||||
let ty_size = tables
|
||||
.tcx
|
||||
.layout_of(rustc_middle::ty::ParamEnv::reveal_all().and(const_kind.ty()))
|
||||
.layout_of(rustc_middle::ty::ParamEnv::reveal_all().and(ty))
|
||||
.unwrap()
|
||||
.size;
|
||||
allocation_filter(&alloc.0, alloc_range(offset, ty_size), tables)
|
||||
|
Loading…
x
Reference in New Issue
Block a user