implement (as of now still unused) query for valtree -> constvalue conversion
This commit is contained in:
parent
1157dc7167
commit
28af967bb9
3 changed files with 20 additions and 0 deletions
|
@ -35,6 +35,7 @@ pub mod transform;
|
||||||
pub mod util;
|
pub mod util;
|
||||||
|
|
||||||
use rustc_middle::ty::query::Providers;
|
use rustc_middle::ty::query::Providers;
|
||||||
|
use rustc_middle::ty::ParamEnv;
|
||||||
|
|
||||||
pub fn provide(providers: &mut Providers) {
|
pub fn provide(providers: &mut Providers) {
|
||||||
const_eval::provide(providers);
|
const_eval::provide(providers);
|
||||||
|
@ -49,6 +50,9 @@ pub fn provide(providers: &mut Providers) {
|
||||||
let (param_env, raw) = param_env_and_value.into_parts();
|
let (param_env, raw) = param_env_and_value.into_parts();
|
||||||
const_eval::const_to_valtree(tcx, param_env, raw)
|
const_eval::const_to_valtree(tcx, param_env, raw)
|
||||||
};
|
};
|
||||||
|
providers.valtree_to_const_val = |tcx, (ty, valtree)| {
|
||||||
|
const_eval::valtree_to_const_value(tcx, ParamEnv::empty().and(ty), valtree)
|
||||||
|
};
|
||||||
providers.deref_const = |tcx, param_env_and_value| {
|
providers.deref_const = |tcx, param_env_and_value| {
|
||||||
let (param_env, value) = param_env_and_value.into_parts();
|
let (param_env, value) = param_env_and_value.into_parts();
|
||||||
const_eval::deref_const(tcx, param_env, value)
|
const_eval::deref_const(tcx, param_env, value)
|
||||||
|
|
|
@ -936,6 +936,11 @@ rustc_queries! {
|
||||||
remap_env_constness
|
remap_env_constness
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Converts a type level constant value into `ConstValue`
|
||||||
|
query valtree_to_const_val(key: (Ty<'tcx>, ty::ValTree<'tcx>)) -> ConstValue<'tcx> {
|
||||||
|
desc { "convert type-level constant value to mir constant value"}
|
||||||
|
}
|
||||||
|
|
||||||
/// Destructure a constant ADT or array into its variant index and its
|
/// Destructure a constant ADT or array into its variant index and its
|
||||||
/// field values or return `None` if constant is invalid.
|
/// field values or return `None` if constant is invalid.
|
||||||
///
|
///
|
||||||
|
|
|
@ -502,3 +502,14 @@ impl<'tcx> Key for (ty::Instance<'tcx>, &'tcx ty::List<Ty<'tcx>>) {
|
||||||
self.0.default_span(tcx)
|
self.0.default_span(tcx)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'tcx> Key for (Ty<'tcx>, ty::ValTree<'tcx>) {
|
||||||
|
#[inline(always)]
|
||||||
|
fn query_crate_is_local(&self) -> bool {
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
fn default_span(&self, _: TyCtxt<'_>) -> Span {
|
||||||
|
DUMMY_SP
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue