format Const
's less verbosely
This commit is contained in:
parent
9239760da8
commit
e16d71b706
4 changed files with 71 additions and 41 deletions
|
@ -6,7 +6,6 @@ use rustc_hir as hir;
|
||||||
use rustc_hir::def::{DefKind, Res};
|
use rustc_hir::def::{DefKind, Res};
|
||||||
use rustc_hir::def_id::LocalDefId;
|
use rustc_hir::def_id::LocalDefId;
|
||||||
use rustc_macros::HashStable;
|
use rustc_macros::HashStable;
|
||||||
use std::fmt;
|
|
||||||
|
|
||||||
mod int;
|
mod int;
|
||||||
mod kind;
|
mod kind;
|
||||||
|
@ -21,15 +20,6 @@ pub use valtree::*;
|
||||||
#[rustc_pass_by_value]
|
#[rustc_pass_by_value]
|
||||||
pub struct Const<'tcx>(pub(super) Interned<'tcx, ConstData<'tcx>>);
|
pub struct Const<'tcx>(pub(super) Interned<'tcx, ConstData<'tcx>>);
|
||||||
|
|
||||||
impl<'tcx> fmt::Debug for Const<'tcx> {
|
|
||||||
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
|
||||||
// This reflects what `Const` looked liked before `Interned` was
|
|
||||||
// introduced. We print it like this to avoid having to update expected
|
|
||||||
// output in a lot of tests.
|
|
||||||
write!(f, "Const {{ ty: {:?}, kind: {:?} }}", self.ty(), self.kind())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Typed constant value.
|
/// Typed constant value.
|
||||||
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash, HashStable, TyEncodable, TyDecodable)]
|
#[derive(PartialEq, Eq, PartialOrd, Ord, Hash, HashStable, TyEncodable, TyDecodable)]
|
||||||
pub struct ConstData<'tcx> {
|
pub struct ConstData<'tcx> {
|
||||||
|
|
|
@ -42,7 +42,7 @@ impl<'tcx> UnevaluatedConst<'tcx> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Represents a constant in Rust.
|
/// Represents a constant in Rust.
|
||||||
#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord, TyEncodable, TyDecodable)]
|
#[derive(Copy, Clone, Eq, PartialEq, PartialOrd, Ord, TyEncodable, TyDecodable)]
|
||||||
#[derive(Hash, HashStable, TypeFoldable, TypeVisitable)]
|
#[derive(Hash, HashStable, TypeFoldable, TypeVisitable)]
|
||||||
#[derive(derive_more::From)]
|
#[derive(derive_more::From)]
|
||||||
pub enum ConstKind<'tcx> {
|
pub enum ConstKind<'tcx> {
|
||||||
|
@ -128,7 +128,7 @@ impl<'tcx> ConstKind<'tcx> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// An inference variable for a const, for use in const generics.
|
/// An inference variable for a const, for use in const generics.
|
||||||
#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord, TyEncodable, TyDecodable, Hash)]
|
#[derive(Copy, Clone, Eq, PartialEq, PartialOrd, Ord, TyEncodable, TyDecodable, Hash)]
|
||||||
pub enum InferConst<'tcx> {
|
pub enum InferConst<'tcx> {
|
||||||
/// Infer the value of the const.
|
/// Infer the value of the const.
|
||||||
Var(ty::ConstVid<'tcx>),
|
Var(ty::ConstVid<'tcx>),
|
||||||
|
|
|
@ -703,7 +703,7 @@ pub trait PrettyPrinter<'tcx>:
|
||||||
ty::Error(_) => p!("[type error]"),
|
ty::Error(_) => p!("[type error]"),
|
||||||
ty::Param(ref param_ty) => p!(print(param_ty)),
|
ty::Param(ref param_ty) => p!(print(param_ty)),
|
||||||
ty::Bound(debruijn, bound_ty) => match bound_ty.kind {
|
ty::Bound(debruijn, bound_ty) => match bound_ty.kind {
|
||||||
ty::BoundTyKind::Anon => self.pretty_print_bound_var(debruijn, bound_ty.var)?,
|
ty::BoundTyKind::Anon => debug_bound_var(&mut self, debruijn, bound_ty.var)?,
|
||||||
ty::BoundTyKind::Param(_, s) => match self.should_print_verbose() {
|
ty::BoundTyKind::Param(_, s) => match self.should_print_verbose() {
|
||||||
true if debruijn == ty::INNERMOST => p!(write("^{}", s)),
|
true if debruijn == ty::INNERMOST => p!(write("^{}", s)),
|
||||||
true => p!(write("^{}_{}", debruijn.index(), s)),
|
true => p!(write("^{}_{}", debruijn.index(), s)),
|
||||||
|
@ -741,7 +741,7 @@ pub trait PrettyPrinter<'tcx>:
|
||||||
}
|
}
|
||||||
ty::Placeholder(placeholder) => match placeholder.bound.kind {
|
ty::Placeholder(placeholder) => match placeholder.bound.kind {
|
||||||
ty::BoundTyKind::Anon => {
|
ty::BoundTyKind::Anon => {
|
||||||
self.pretty_print_placeholder_var(placeholder.universe, placeholder.bound.var)?
|
debug_placeholder_var(&mut self, placeholder.universe, placeholder.bound.var)?;
|
||||||
}
|
}
|
||||||
ty::BoundTyKind::Param(_, name) => p!(write("{}", name)),
|
ty::BoundTyKind::Param(_, name) => p!(write("{}", name)),
|
||||||
},
|
},
|
||||||
|
@ -1164,30 +1164,6 @@ pub trait PrettyPrinter<'tcx>:
|
||||||
traits.entry(trait_ref).or_default().extend(proj_ty);
|
traits.entry(trait_ref).or_default().extend(proj_ty);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn pretty_print_bound_var(
|
|
||||||
&mut self,
|
|
||||||
debruijn: ty::DebruijnIndex,
|
|
||||||
var: ty::BoundVar,
|
|
||||||
) -> Result<(), Self::Error> {
|
|
||||||
if debruijn == ty::INNERMOST {
|
|
||||||
write!(self, "^{}", var.index())
|
|
||||||
} else {
|
|
||||||
write!(self, "^{}_{}", debruijn.index(), var.index())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn pretty_print_placeholder_var(
|
|
||||||
&mut self,
|
|
||||||
ui: ty::UniverseIndex,
|
|
||||||
var: ty::BoundVar,
|
|
||||||
) -> Result<(), Self::Error> {
|
|
||||||
if ui == ty::UniverseIndex::ROOT {
|
|
||||||
write!(self, "!{}", var.index())
|
|
||||||
} else {
|
|
||||||
write!(self, "!{}_{}", ui.index(), var.index())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn ty_infer_name(&self, _: ty::TyVid) -> Option<Symbol> {
|
fn ty_infer_name(&self, _: ty::TyVid) -> Option<Symbol> {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
@ -1321,7 +1297,7 @@ pub trait PrettyPrinter<'tcx>:
|
||||||
define_scoped_cx!(self);
|
define_scoped_cx!(self);
|
||||||
|
|
||||||
if self.should_print_verbose() {
|
if self.should_print_verbose() {
|
||||||
p!(write("Const({:?}: {:?})", ct.kind(), ct.ty()));
|
p!(write("{:?}", ct));
|
||||||
return Ok(self);
|
return Ok(self);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1380,9 +1356,11 @@ pub trait PrettyPrinter<'tcx>:
|
||||||
}
|
}
|
||||||
|
|
||||||
ty::ConstKind::Bound(debruijn, bound_var) => {
|
ty::ConstKind::Bound(debruijn, bound_var) => {
|
||||||
self.pretty_print_bound_var(debruijn, bound_var)?
|
debug_bound_var(&mut self, debruijn, bound_var)?
|
||||||
}
|
}
|
||||||
ty::ConstKind::Placeholder(placeholder) => p!(write("Placeholder({:?})", placeholder)),
|
ty::ConstKind::Placeholder(placeholder) => {
|
||||||
|
debug_placeholder_var(&mut self, placeholder.universe, placeholder.bound)?;
|
||||||
|
},
|
||||||
// FIXME(generic_const_exprs):
|
// FIXME(generic_const_exprs):
|
||||||
// write out some legible representation of an abstract const?
|
// write out some legible representation of an abstract const?
|
||||||
ty::ConstKind::Expr(_) => p!("[const expr]"),
|
ty::ConstKind::Expr(_) => p!("[const expr]"),
|
||||||
|
@ -3067,3 +3045,27 @@ pub struct OpaqueFnEntry<'tcx> {
|
||||||
fn_trait_ref: Option<ty::PolyTraitRef<'tcx>>,
|
fn_trait_ref: Option<ty::PolyTraitRef<'tcx>>,
|
||||||
return_ty: Option<ty::Binder<'tcx, Term<'tcx>>>,
|
return_ty: Option<ty::Binder<'tcx, Term<'tcx>>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn debug_bound_var<T: std::fmt::Write>(
|
||||||
|
fmt: &mut T,
|
||||||
|
debruijn: ty::DebruijnIndex,
|
||||||
|
var: ty::BoundVar,
|
||||||
|
) -> Result<(), std::fmt::Error> {
|
||||||
|
if debruijn == ty::INNERMOST {
|
||||||
|
write!(fmt, "^{}", var.index())
|
||||||
|
} else {
|
||||||
|
write!(fmt, "^{}_{}", debruijn.index(), var.index())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn debug_placeholder_var<T: std::fmt::Write>(
|
||||||
|
fmt: &mut T,
|
||||||
|
universe: ty::UniverseIndex,
|
||||||
|
bound: ty::BoundVar,
|
||||||
|
) -> Result<(), std::fmt::Error> {
|
||||||
|
if universe == ty::UniverseIndex::ROOT {
|
||||||
|
write!(fmt, "!{}", bound.index())
|
||||||
|
} else {
|
||||||
|
write!(fmt, "!{}_{}", universe.index(), bound.index())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -192,6 +192,44 @@ impl<'tcx> fmt::Debug for AliasTy<'tcx> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<'tcx> fmt::Debug for ty::InferConst<'tcx> {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
match self {
|
||||||
|
InferConst::Var(var) => write!(f, "{var:?}"),
|
||||||
|
InferConst::Fresh(var) => write!(f, "Fresh({var:?})"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'tcx> fmt::Debug for ty::Const<'tcx> {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
|
||||||
|
// This reflects what `Const` looked liked before `Interned` was
|
||||||
|
// introduced. We print it like this to avoid having to update expected
|
||||||
|
// output in a lot of tests.
|
||||||
|
write!(f, "Const {{ ty: {:?}, kind: {:?} }}", self.ty(), self.kind())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'tcx> fmt::Debug for ty::ConstKind<'tcx> {
|
||||||
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||||
|
use ty::ConstKind::*;
|
||||||
|
match self {
|
||||||
|
Param(param) => write!(f, "{param:?}"),
|
||||||
|
Infer(var) => write!(f, "{var:?}"),
|
||||||
|
Bound(debruijn, var) => ty::print::debug_bound_var(f, *debruijn, *var),
|
||||||
|
Placeholder(placeholder) => {
|
||||||
|
ty::print::debug_placeholder_var(f, placeholder.universe, placeholder.bound)
|
||||||
|
}
|
||||||
|
Unevaluated(uv) => {
|
||||||
|
f.debug_tuple("Unevaluated").field(&uv.substs).field(&uv.def).finish()
|
||||||
|
}
|
||||||
|
Value(valtree) => write!(f, "{valtree:?}"),
|
||||||
|
Error(_) => write!(f, "[const error]"),
|
||||||
|
Expr(expr) => write!(f, "{expr:?}"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////
|
||||||
// Atomic structs
|
// Atomic structs
|
||||||
//
|
//
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue