use rustc_hir::intravisit::{walk_expr, Visitor};
use rustc_hir::{
self as hir, AnonConst, BinOpKind, BindingAnnotation, Body, Expr, ExprKind, FnRetTy, FnSig, GenericArg,
- ImplItemKind, ItemKind, Lifetime, LifetimeName, Mutability, Node, Param, ParamName, PatKind, QPath, TraitFn,
- TraitItem, TraitItemKind, TyKind, Unsafety,
+ ImplItemKind, ItemKind, Lifetime, Mutability, Node, Param, PatKind, QPath, TraitFn, TraitItem, TraitItemKind,
+ TyKind, Unsafety,
};
use rustc_infer::infer::TyCtxtInferExt;
use rustc_infer::traits::{Obligation, ObligationCause};
}
struct RefPrefix {
- lt: LifetimeName,
+ lt: Lifetime,
mutability: Mutability,
}
impl fmt::Display for RefPrefix {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
use fmt::Write;
f.write_char('&')?;
- match self.lt {
- LifetimeName::Param(_, ParamName::Plain(name)) => {
- name.fmt(f)?;
- f.write_char(' ')?;
- },
- LifetimeName::Infer => f.write_str("'_ ")?,
- LifetimeName::Static => f.write_str("'static ")?,
- _ => (),
+ if !self.lt.is_anonymous() {
+ self.lt.ident.fmt(f)?;
+ f.write_char(' ')?;
}
f.write_str(self.mutability.prefix_str())
}
ty_name: name.ident.name,
method_renames,
ref_prefix: RefPrefix {
- lt: lt.name,
+ lt: *lt,
mutability,
},
deref_ty,
cx.tcx,
ObligationCause::dummy(),
cx.param_env,
- cx.tcx.mk_predicate(Binder::dummy(
- PredicateKind::Clause(Clause::Projection(p.with_self_ty(cx.tcx, ty))),
- )),
+ cx.tcx
+ .mk_predicate(Binder::dummy(PredicateKind::Clause(Clause::Projection(
+ p.with_self_ty(cx.tcx, ty),
+ )))),
)),
ExistentialPredicate::AutoTrait(p) => infcx
.type_implements_trait(p, [ty], cx.param_env)