Remove fn special casing in const printing

This commit is contained in:
Oliver Scherer 2020-03-12 13:35:44 +01:00
parent d0b12117c5
commit 6e73a14234
2 changed files with 27 additions and 12 deletions

View File

@ -858,16 +858,23 @@ pub trait PrettyPrinter<'tcx>:
macro_rules! print_underscore {
() => {{
p!(write("_"));
if print_ty {
p!(write(": "), print(ct.ty));
self = self.typed_value(
|mut this| {
write!(this, "_")?;
Ok(this)
},
|this| this.print_type(ct.ty),
": ",
)?;
} else {
write!(self, "_")?;
}
}};
}
match (ct.val, &ct.ty.kind) {
(_, ty::FnDef(did, substs)) => p!(print_value_path(*did, substs)),
(ty::ConstKind::Unevaluated(did, substs, promoted), _) => {
match ct.val {
ty::ConstKind::Unevaluated(did, substs, promoted) => {
if let Some(promoted) = promoted {
p!(print_value_path(did, substs));
p!(write("::{:?}", promoted));
@ -892,17 +899,25 @@ pub trait PrettyPrinter<'tcx>:
}
}
}
(ty::ConstKind::Infer(..), _) => print_underscore!(),
(ty::ConstKind::Param(ParamConst { name, .. }), _) => p!(write("{}", name)),
(ty::ConstKind::Value(value), _) => {
ty::ConstKind::Infer(..) => print_underscore!(),
ty::ConstKind::Param(ParamConst { name, .. }) => p!(write("{}", name)),
ty::ConstKind::Value(value) => {
return self.pretty_print_const_value(value, ct.ty, print_ty);
}
_ => {
ty::ConstKind::Bound(..) | ty::ConstKind::Placeholder(_) => {
// fallback
p!(write("{:?}", ct.val));
if print_ty {
p!(write(": "), print(ct.ty));
self = self.typed_value(
|mut this| {
write!(this, "{:?}", ct.val)?;
Ok(this)
},
|this| this.print_type(ct.ty),
": ",
)?;
} else {
p!(write("{:?}", ct.val));
}
}
};

View File

@ -10,7 +10,7 @@ error[E0282]: type annotations needed
--> $DIR/cannot-infer-const-args.rs:9:5
|
LL | foo();
| ^^^ cannot infer type for fn item `fn() -> usize {foo::<_: usize>}`
| ^^^ cannot infer type for fn item `fn() -> usize {foo::<{_: usize}>}`
error: aborting due to previous error