Simplify calls to tcx.mk_const
`mk_const(ty::ConstKind::X(...), ty)` can now be simplified to `mk_cosnt(..., ty)`. I searched with the following regex: \mk_const\([\n\s]*(ty::)?ConstKind\ I've left `ty::ConstKind::{Bound, Error}` as-is, they seem clearer this way.
This commit is contained in:
parent
7087d9b2a0
commit
26b87bf8ff
10 changed files with 27 additions and 46 deletions
|
@ -147,7 +147,7 @@ impl<'tcx> InferCtxt<'tcx> {
|
||||||
CanonicalVarKind::PlaceholderConst(ty::PlaceholderConst { universe, name }, ty) => {
|
CanonicalVarKind::PlaceholderConst(ty::PlaceholderConst { universe, name }, ty) => {
|
||||||
let universe_mapped = universe_map(universe);
|
let universe_mapped = universe_map(universe);
|
||||||
let placeholder_mapped = ty::PlaceholderConst { universe: universe_mapped, name };
|
let placeholder_mapped = ty::PlaceholderConst { universe: universe_mapped, name };
|
||||||
self.tcx.mk_const(ty::ConstKind::Placeholder(placeholder_mapped), ty).into()
|
self.tcx.mk_const(placeholder_mapped, ty).into()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -765,10 +765,7 @@ impl<'tcx> TypeRelation<'tcx> for Generalizer<'_, 'tcx> {
|
||||||
substs,
|
substs,
|
||||||
substs,
|
substs,
|
||||||
)?;
|
)?;
|
||||||
Ok(self.tcx().mk_const(
|
Ok(self.tcx().mk_const(ty::UnevaluatedConst { def, substs }, c.ty()))
|
||||||
ty::ConstKind::Unevaluated(ty::UnevaluatedConst { def, substs }),
|
|
||||||
c.ty(),
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
_ => relate::super_relate_consts(self, c, c),
|
_ => relate::super_relate_consts(self, c, c),
|
||||||
}
|
}
|
||||||
|
@ -988,10 +985,7 @@ impl<'tcx> TypeRelation<'tcx> for ConstInferUnifier<'_, 'tcx> {
|
||||||
substs,
|
substs,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
Ok(self.tcx().mk_const(
|
Ok(self.tcx().mk_const(ty::UnevaluatedConst { def, substs }, c.ty()))
|
||||||
ty::ConstKind::Unevaluated(ty::UnevaluatedConst { def, substs }),
|
|
||||||
c.ty(),
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
_ => relate::super_relate_consts(self, c, c),
|
_ => relate::super_relate_consts(self, c, c),
|
||||||
}
|
}
|
||||||
|
|
|
@ -94,13 +94,8 @@ impl<'tcx> InferCtxt<'tcx> {
|
||||||
}))
|
}))
|
||||||
},
|
},
|
||||||
consts: &mut |bound_var: ty::BoundVar, ty| {
|
consts: &mut |bound_var: ty::BoundVar, ty| {
|
||||||
self.tcx.mk_const(
|
self.tcx
|
||||||
ty::ConstKind::Placeholder(ty::PlaceholderConst {
|
.mk_const(ty::PlaceholderConst { universe: next_universe, name: bound_var }, ty)
|
||||||
universe: next_universe,
|
|
||||||
name: bound_var,
|
|
||||||
}),
|
|
||||||
ty,
|
|
||||||
)
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -2049,10 +2049,10 @@ fn replace_param_and_infer_substs_with_placeholder<'tcx>(
|
||||||
bug!("const `{ct}`'s type should not reference params or types");
|
bug!("const `{ct}`'s type should not reference params or types");
|
||||||
}
|
}
|
||||||
tcx.mk_const(
|
tcx.mk_const(
|
||||||
ty::ConstKind::Placeholder(ty::PlaceholderConst {
|
ty::PlaceholderConst {
|
||||||
universe: ty::UniverseIndex::ROOT,
|
universe: ty::UniverseIndex::ROOT,
|
||||||
name: ty::BoundVar::from_usize(idx),
|
name: ty::BoundVar::from_usize(idx),
|
||||||
}),
|
},
|
||||||
ty,
|
ty,
|
||||||
)
|
)
|
||||||
.into()
|
.into()
|
||||||
|
|
|
@ -2527,8 +2527,7 @@ impl<'tcx> ConstantKind<'tcx> {
|
||||||
let generics = tcx.generics_of(item_def_id);
|
let generics = tcx.generics_of(item_def_id);
|
||||||
let index = generics.param_def_id_to_index[&def_id];
|
let index = generics.param_def_id_to_index[&def_id];
|
||||||
let name = tcx.item_name(def_id);
|
let name = tcx.item_name(def_id);
|
||||||
let ty_const =
|
let ty_const = tcx.mk_const(ty::ParamConst::new(index, name), ty);
|
||||||
tcx.mk_const(ty::ConstKind::Param(ty::ParamConst::new(index, name)), ty);
|
|
||||||
debug!(?ty_const);
|
debug!(?ty_const);
|
||||||
|
|
||||||
return Self::Ty(ty_const);
|
return Self::Ty(ty_const);
|
||||||
|
|
|
@ -76,10 +76,10 @@ impl<'tcx> Const<'tcx> {
|
||||||
match Self::try_eval_lit_or_param(tcx, ty, expr) {
|
match Self::try_eval_lit_or_param(tcx, ty, expr) {
|
||||||
Some(v) => v,
|
Some(v) => v,
|
||||||
None => tcx.mk_const(
|
None => tcx.mk_const(
|
||||||
ty::ConstKind::Unevaluated(ty::UnevaluatedConst {
|
ty::UnevaluatedConst {
|
||||||
def: def.to_global(),
|
def: def.to_global(),
|
||||||
substs: InternalSubsts::identity_for_item(tcx, def.did.to_def_id()),
|
substs: InternalSubsts::identity_for_item(tcx, def.did.to_def_id()),
|
||||||
}),
|
},
|
||||||
ty,
|
ty,
|
||||||
),
|
),
|
||||||
}
|
}
|
||||||
|
@ -134,7 +134,7 @@ impl<'tcx> Const<'tcx> {
|
||||||
let generics = tcx.generics_of(item_def_id);
|
let generics = tcx.generics_of(item_def_id);
|
||||||
let index = generics.param_def_id_to_index[&def_id];
|
let index = generics.param_def_id_to_index[&def_id];
|
||||||
let name = tcx.item_name(def_id);
|
let name = tcx.item_name(def_id);
|
||||||
Some(tcx.mk_const(ty::ConstKind::Param(ty::ParamConst::new(index, name)), ty))
|
Some(tcx.mk_const(ty::ParamConst::new(index, name), ty))
|
||||||
}
|
}
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
}
|
||||||
|
@ -143,7 +143,7 @@ impl<'tcx> Const<'tcx> {
|
||||||
/// Interns the given value as a constant.
|
/// Interns the given value as a constant.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn from_value(tcx: TyCtxt<'tcx>, val: ty::ValTree<'tcx>, ty: Ty<'tcx>) -> Self {
|
pub fn from_value(tcx: TyCtxt<'tcx>, val: ty::ValTree<'tcx>, ty: Ty<'tcx>) -> Self {
|
||||||
tcx.mk_const(ConstKind::Value(val), ty)
|
tcx.mk_const(val, ty)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Panics if self.kind != ty::ConstKind::Value
|
/// Panics if self.kind != ty::ConstKind::Value
|
||||||
|
|
|
@ -663,10 +663,7 @@ pub fn super_relate_consts<'tcx, R: TypeRelation<'tcx>>(
|
||||||
au.substs,
|
au.substs,
|
||||||
bu.substs,
|
bu.substs,
|
||||||
)?;
|
)?;
|
||||||
return Ok(tcx.mk_const(
|
return Ok(tcx.mk_const(ty::UnevaluatedConst { def: au.def, substs }, a.ty()));
|
||||||
ty::ConstKind::Unevaluated(ty::UnevaluatedConst { def: au.def, substs }),
|
|
||||||
a.ty(),
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
// Before calling relate on exprs, it is necessary to ensure that the nested consts
|
// Before calling relate on exprs, it is necessary to ensure that the nested consts
|
||||||
// have identical types.
|
// have identical types.
|
||||||
|
|
|
@ -77,7 +77,7 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||||
Constant { user_ty, span, literal }
|
Constant { user_ty, span, literal }
|
||||||
}
|
}
|
||||||
ExprKind::ConstParam { param, def_id: _ } => {
|
ExprKind::ConstParam { param, def_id: _ } => {
|
||||||
let const_param = tcx.mk_const(ty::ConstKind::Param(param), expr.ty);
|
let const_param = tcx.mk_const(param, expr.ty);
|
||||||
let literal = ConstantKind::Ty(const_param);
|
let literal = ConstantKind::Ty(const_param);
|
||||||
|
|
||||||
Constant { user_ty: None, span, literal }
|
Constant { user_ty: None, span, literal }
|
||||||
|
|
|
@ -818,7 +818,7 @@ impl<'tcx> TypeFolder<'tcx> for BoundVarReplacer<'_, 'tcx> {
|
||||||
let universe = self.universe_for(debruijn);
|
let universe = self.universe_for(debruijn);
|
||||||
let p = ty::PlaceholderConst { universe, name: bound_const };
|
let p = ty::PlaceholderConst { universe, name: bound_const };
|
||||||
self.mapped_consts.insert(p, bound_const);
|
self.mapped_consts.insert(p, bound_const);
|
||||||
self.infcx.tcx.mk_const(ty::ConstKind::Placeholder(p), ct.ty())
|
self.infcx.tcx.mk_const(p, ct.ty())
|
||||||
}
|
}
|
||||||
_ => ct.super_fold_with(self),
|
_ => ct.super_fold_with(self),
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,7 +5,7 @@ use rustc_middle::mir::interpret::{LitToConstError, LitToConstInput};
|
||||||
use rustc_middle::thir::visit;
|
use rustc_middle::thir::visit;
|
||||||
use rustc_middle::thir::visit::Visitor;
|
use rustc_middle::thir::visit::Visitor;
|
||||||
use rustc_middle::ty::abstract_const::CastKind;
|
use rustc_middle::ty::abstract_const::CastKind;
|
||||||
use rustc_middle::ty::{self, ConstKind, Expr, TyCtxt, TypeVisitable};
|
use rustc_middle::ty::{self, Expr, TyCtxt, TypeVisitable};
|
||||||
use rustc_middle::{mir, thir};
|
use rustc_middle::{mir, thir};
|
||||||
use rustc_span::Span;
|
use rustc_span::Span;
|
||||||
use rustc_target::abi::VariantIdx;
|
use rustc_target::abi::VariantIdx;
|
||||||
|
@ -32,10 +32,8 @@ pub(crate) fn destructure_const<'tcx>(
|
||||||
let (fields, variant) = match const_.ty().kind() {
|
let (fields, variant) = match const_.ty().kind() {
|
||||||
ty::Array(inner_ty, _) | ty::Slice(inner_ty) => {
|
ty::Array(inner_ty, _) | ty::Slice(inner_ty) => {
|
||||||
// construct the consts for the elements of the array/slice
|
// construct the consts for the elements of the array/slice
|
||||||
let field_consts = branches
|
let field_consts =
|
||||||
.iter()
|
branches.iter().map(|b| tcx.mk_const(*b, *inner_ty)).collect::<Vec<_>>();
|
||||||
.map(|b| tcx.mk_const(ty::ConstKind::Value(*b), *inner_ty))
|
|
||||||
.collect::<Vec<_>>();
|
|
||||||
debug!(?field_consts);
|
debug!(?field_consts);
|
||||||
|
|
||||||
(field_consts, None)
|
(field_consts, None)
|
||||||
|
@ -53,7 +51,7 @@ pub(crate) fn destructure_const<'tcx>(
|
||||||
|
|
||||||
for (field, field_valtree) in iter::zip(fields, branches) {
|
for (field, field_valtree) in iter::zip(fields, branches) {
|
||||||
let field_ty = field.ty(tcx, substs);
|
let field_ty = field.ty(tcx, substs);
|
||||||
let field_const = tcx.mk_const(ty::ConstKind::Value(*field_valtree), field_ty);
|
let field_const = tcx.mk_const(*field_valtree, field_ty);
|
||||||
field_consts.push(field_const);
|
field_consts.push(field_const);
|
||||||
}
|
}
|
||||||
debug!(?field_consts);
|
debug!(?field_consts);
|
||||||
|
@ -62,9 +60,7 @@ pub(crate) fn destructure_const<'tcx>(
|
||||||
}
|
}
|
||||||
ty::Tuple(elem_tys) => {
|
ty::Tuple(elem_tys) => {
|
||||||
let fields = iter::zip(*elem_tys, branches)
|
let fields = iter::zip(*elem_tys, branches)
|
||||||
.map(|(elem_ty, elem_valtree)| {
|
.map(|(elem_ty, elem_valtree)| tcx.mk_const(*elem_valtree, elem_ty))
|
||||||
tcx.mk_const(ty::ConstKind::Value(*elem_valtree), elem_ty)
|
|
||||||
})
|
|
||||||
.collect::<Vec<_>>();
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
(fields, None)
|
(fields, None)
|
||||||
|
@ -137,9 +133,9 @@ fn recurse_build<'tcx>(
|
||||||
}
|
}
|
||||||
&ExprKind::NamedConst { def_id, substs, user_ty: _ } => {
|
&ExprKind::NamedConst { def_id, substs, user_ty: _ } => {
|
||||||
let uneval = ty::UnevaluatedConst::new(ty::WithOptConstParam::unknown(def_id), substs);
|
let uneval = ty::UnevaluatedConst::new(ty::WithOptConstParam::unknown(def_id), substs);
|
||||||
tcx.mk_const(ty::ConstKind::Unevaluated(uneval), node.ty)
|
tcx.mk_const(uneval, node.ty)
|
||||||
}
|
}
|
||||||
ExprKind::ConstParam { param, .. } => tcx.mk_const(ty::ConstKind::Param(*param), node.ty),
|
ExprKind::ConstParam { param, .. } => tcx.mk_const(*param, node.ty),
|
||||||
|
|
||||||
ExprKind::Call { fun, args, .. } => {
|
ExprKind::Call { fun, args, .. } => {
|
||||||
let fun = recurse_build(tcx, body, *fun, root_span)?;
|
let fun = recurse_build(tcx, body, *fun, root_span)?;
|
||||||
|
@ -149,16 +145,16 @@ fn recurse_build<'tcx>(
|
||||||
new_args.push(recurse_build(tcx, body, id, root_span)?);
|
new_args.push(recurse_build(tcx, body, id, root_span)?);
|
||||||
}
|
}
|
||||||
let new_args = tcx.mk_const_list(new_args.iter());
|
let new_args = tcx.mk_const_list(new_args.iter());
|
||||||
tcx.mk_const(ConstKind::Expr(Expr::FunctionCall(fun, new_args)), node.ty)
|
tcx.mk_const(Expr::FunctionCall(fun, new_args), node.ty)
|
||||||
}
|
}
|
||||||
&ExprKind::Binary { op, lhs, rhs } if check_binop(op) => {
|
&ExprKind::Binary { op, lhs, rhs } if check_binop(op) => {
|
||||||
let lhs = recurse_build(tcx, body, lhs, root_span)?;
|
let lhs = recurse_build(tcx, body, lhs, root_span)?;
|
||||||
let rhs = recurse_build(tcx, body, rhs, root_span)?;
|
let rhs = recurse_build(tcx, body, rhs, root_span)?;
|
||||||
tcx.mk_const(ConstKind::Expr(Expr::Binop(op, lhs, rhs)), node.ty)
|
tcx.mk_const(Expr::Binop(op, lhs, rhs), node.ty)
|
||||||
}
|
}
|
||||||
&ExprKind::Unary { op, arg } if check_unop(op) => {
|
&ExprKind::Unary { op, arg } if check_unop(op) => {
|
||||||
let arg = recurse_build(tcx, body, arg, root_span)?;
|
let arg = recurse_build(tcx, body, arg, root_span)?;
|
||||||
tcx.mk_const(ConstKind::Expr(Expr::UnOp(op, arg)), node.ty)
|
tcx.mk_const(Expr::UnOp(op, arg), node.ty)
|
||||||
}
|
}
|
||||||
// This is necessary so that the following compiles:
|
// This is necessary so that the following compiles:
|
||||||
//
|
//
|
||||||
|
@ -179,11 +175,11 @@ fn recurse_build<'tcx>(
|
||||||
// This is important so that `N as usize as usize` doesnt unify with `N as usize`. (untested)
|
// This is important so that `N as usize as usize` doesnt unify with `N as usize`. (untested)
|
||||||
&ExprKind::Use { source } => {
|
&ExprKind::Use { source } => {
|
||||||
let arg = recurse_build(tcx, body, source, root_span)?;
|
let arg = recurse_build(tcx, body, source, root_span)?;
|
||||||
tcx.mk_const(ConstKind::Expr(Expr::Cast(CastKind::Use, arg, node.ty)), node.ty)
|
tcx.mk_const(Expr::Cast(CastKind::Use, arg, node.ty), node.ty)
|
||||||
}
|
}
|
||||||
&ExprKind::Cast { source } => {
|
&ExprKind::Cast { source } => {
|
||||||
let arg = recurse_build(tcx, body, source, root_span)?;
|
let arg = recurse_build(tcx, body, source, root_span)?;
|
||||||
tcx.mk_const(ConstKind::Expr(Expr::Cast(CastKind::As, arg, node.ty)), node.ty)
|
tcx.mk_const(Expr::Cast(CastKind::As, arg, node.ty), node.ty)
|
||||||
}
|
}
|
||||||
ExprKind::Borrow { arg, .. } => {
|
ExprKind::Borrow { arg, .. } => {
|
||||||
let arg_node = &body.exprs[*arg];
|
let arg_node = &body.exprs[*arg];
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue