1
Fork 0

No need to take ImplTraitContext by ref

This commit is contained in:
Michael Goulet 2024-02-07 19:27:44 +00:00
parent d4f6f9ee6a
commit cd21b1d036
8 changed files with 90 additions and 92 deletions

View file

@ -205,7 +205,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
&sym.qself, &sym.qself,
&sym.path, &sym.path,
ParamMode::Optional, ParamMode::Optional,
&ImplTraitContext::Disallowed(ImplTraitPosition::Path), ImplTraitContext::Disallowed(ImplTraitPosition::Path),
None, None,
); );
hir::InlineAsmOperand::SymStatic { path, def_id } hir::InlineAsmOperand::SymStatic { path, def_id }

View file

@ -85,7 +85,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
let ty = l let ty = l
.ty .ty
.as_ref() .as_ref()
.map(|t| self.lower_ty(t, &ImplTraitContext::Disallowed(ImplTraitPosition::Variable))); .map(|t| self.lower_ty(t, ImplTraitContext::Disallowed(ImplTraitPosition::Variable)));
let init = l.kind.init().map(|init| self.lower_expr(init)); let init = l.kind.init().map(|init| self.lower_expr(init));
let hir_id = self.lower_node_id(l.id); let hir_id = self.lower_node_id(l.id);
let pat = self.lower_pat(&l.pat); let pat = self.lower_pat(&l.pat);

View file

@ -218,7 +218,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
&delegation.qself, &delegation.qself,
&delegation.path, &delegation.path,
ParamMode::Optional, ParamMode::Optional,
&ImplTraitContext::Disallowed(ImplTraitPosition::Path), ImplTraitContext::Disallowed(ImplTraitPosition::Path),
None, None,
); );
let block = delegation.body.as_deref(); let block = delegation.body.as_deref();

View file

@ -99,7 +99,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
seg, seg,
ParamMode::Optional, ParamMode::Optional,
ParenthesizedGenericArgs::Err, ParenthesizedGenericArgs::Err,
&ImplTraitContext::Disallowed(ImplTraitPosition::Path), ImplTraitContext::Disallowed(ImplTraitPosition::Path),
None, None,
// Method calls can't have bound modifiers // Method calls can't have bound modifiers
None, None,
@ -141,13 +141,13 @@ impl<'hir> LoweringContext<'_, 'hir> {
ExprKind::Cast(expr, ty) => { ExprKind::Cast(expr, ty) => {
let expr = self.lower_expr(expr); let expr = self.lower_expr(expr);
let ty = let ty =
self.lower_ty(ty, &ImplTraitContext::Disallowed(ImplTraitPosition::Cast)); self.lower_ty(ty, ImplTraitContext::Disallowed(ImplTraitPosition::Cast));
hir::ExprKind::Cast(expr, ty) hir::ExprKind::Cast(expr, ty)
} }
ExprKind::Type(expr, ty) => { ExprKind::Type(expr, ty) => {
let expr = self.lower_expr(expr); let expr = self.lower_expr(expr);
let ty = let ty =
self.lower_ty(ty, &ImplTraitContext::Disallowed(ImplTraitPosition::Cast)); self.lower_ty(ty, ImplTraitContext::Disallowed(ImplTraitPosition::Cast));
hir::ExprKind::Type(expr, ty) hir::ExprKind::Type(expr, ty)
} }
ExprKind::AddrOf(k, m, ohs) => { ExprKind::AddrOf(k, m, ohs) => {
@ -267,7 +267,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
qself, qself,
path, path,
ParamMode::Optional, ParamMode::Optional,
&ImplTraitContext::Disallowed(ImplTraitPosition::Path), ImplTraitContext::Disallowed(ImplTraitPosition::Path),
None, None,
); );
hir::ExprKind::Path(qpath) hir::ExprKind::Path(qpath)
@ -295,7 +295,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
ExprKind::OffsetOf(container, fields) => hir::ExprKind::OffsetOf( ExprKind::OffsetOf(container, fields) => hir::ExprKind::OffsetOf(
self.lower_ty( self.lower_ty(
container, container,
&ImplTraitContext::Disallowed(ImplTraitPosition::OffsetOf), ImplTraitContext::Disallowed(ImplTraitPosition::OffsetOf),
), ),
self.arena.alloc_from_iter(fields.iter().map(|&ident| self.lower_ident(ident))), self.arena.alloc_from_iter(fields.iter().map(|&ident| self.lower_ident(ident))),
), ),
@ -314,7 +314,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
&se.qself, &se.qself,
&se.path, &se.path,
ParamMode::Optional, ParamMode::Optional,
&ImplTraitContext::Disallowed(ImplTraitPosition::Path), ImplTraitContext::Disallowed(ImplTraitPosition::Path),
None, None,
)), )),
self.arena self.arena
@ -1241,7 +1241,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
qself, qself,
path, path,
ParamMode::Optional, ParamMode::Optional,
&ImplTraitContext::Disallowed(ImplTraitPosition::Path), ImplTraitContext::Disallowed(ImplTraitPosition::Path),
None, None,
); );
// Destructure like a tuple struct. // Destructure like a tuple struct.
@ -1261,7 +1261,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
qself, qself,
path, path,
ParamMode::Optional, ParamMode::Optional,
&ImplTraitContext::Disallowed(ImplTraitPosition::Path), ImplTraitContext::Disallowed(ImplTraitPosition::Path),
None, None,
); );
// Destructure like a unit struct. // Destructure like a unit struct.
@ -1286,7 +1286,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
&se.qself, &se.qself,
&se.path, &se.path,
ParamMode::Optional, ParamMode::Optional,
&ImplTraitContext::Disallowed(ImplTraitPosition::Path), ImplTraitContext::Disallowed(ImplTraitPosition::Path),
None, None,
); );
let fields_omitted = match &se.rest { let fields_omitted = match &se.rest {

View file

@ -189,7 +189,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
generics, generics,
Const::No, Const::No,
id, id,
&ImplTraitContext::Disallowed(ImplTraitPosition::Generic), ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|this| { |this| {
this.lower_const_item(ty, span, expr.as_deref(), ImplTraitPosition::ConstTy) this.lower_const_item(ty, span, expr.as_deref(), ImplTraitPosition::ConstTy)
}, },
@ -218,7 +218,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
let itctx = ImplTraitContext::Universal; let itctx = ImplTraitContext::Universal;
let (generics, decl) = let (generics, decl) =
this.lower_generics(generics, header.constness, id, &itctx, |this| { this.lower_generics(generics, header.constness, id, itctx, |this| {
this.lower_fn_decl( this.lower_fn_decl(
decl, decl,
id, id,
@ -263,7 +263,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
&generics, &generics,
Const::No, Const::No,
id, id,
&ImplTraitContext::Disallowed(ImplTraitPosition::Generic), ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|this| match ty { |this| match ty {
None => { None => {
let guar = this.dcx().span_delayed_bug( let guar = this.dcx().span_delayed_bug(
@ -274,7 +274,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
} }
Some(ty) => this.lower_ty( Some(ty) => this.lower_ty(
ty, ty,
&ImplTraitContext::TypeAliasesOpaqueTy { in_assoc_ty: false }, ImplTraitContext::TypeAliasesOpaqueTy { in_assoc_ty: false },
), ),
}, },
); );
@ -285,7 +285,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
generics, generics,
Const::No, Const::No,
id, id,
&ImplTraitContext::Disallowed(ImplTraitPosition::Generic), ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|this| { |this| {
this.arena.alloc_from_iter( this.arena.alloc_from_iter(
enum_definition.variants.iter().map(|x| this.lower_variant(x)), enum_definition.variants.iter().map(|x| this.lower_variant(x)),
@ -299,7 +299,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
generics, generics,
Const::No, Const::No,
id, id,
&ImplTraitContext::Disallowed(ImplTraitPosition::Generic), ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|this| this.lower_variant_data(hir_id, struct_def), |this| this.lower_variant_data(hir_id, struct_def),
); );
hir::ItemKind::Struct(struct_def, generics) hir::ItemKind::Struct(struct_def, generics)
@ -309,7 +309,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
generics, generics,
Const::No, Const::No,
id, id,
&ImplTraitContext::Disallowed(ImplTraitPosition::Generic), ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|this| this.lower_variant_data(hir_id, vdata), |this| this.lower_variant_data(hir_id, vdata),
); );
hir::ItemKind::Union(vdata, generics) hir::ItemKind::Union(vdata, generics)
@ -339,7 +339,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
// parent lifetime. // parent lifetime.
let itctx = ImplTraitContext::Universal; let itctx = ImplTraitContext::Universal;
let (generics, (trait_ref, lowered_ty)) = let (generics, (trait_ref, lowered_ty)) =
self.lower_generics(ast_generics, *constness, id, &itctx, |this| { self.lower_generics(ast_generics, *constness, id, itctx, |this| {
let modifiers = TraitBoundModifiers { let modifiers = TraitBoundModifiers {
constness: match *constness { constness: match *constness {
Const::Yes(span) => BoundConstness::Maybe(span), Const::Yes(span) => BoundConstness::Maybe(span),
@ -354,13 +354,13 @@ impl<'hir> LoweringContext<'_, 'hir> {
this.lower_trait_ref( this.lower_trait_ref(
modifiers, modifiers,
trait_ref, trait_ref,
&ImplTraitContext::Disallowed(ImplTraitPosition::Trait), ImplTraitContext::Disallowed(ImplTraitPosition::Trait),
) )
}); });
let lowered_ty = this.lower_ty( let lowered_ty = this.lower_ty(
ty, ty,
&ImplTraitContext::Disallowed(ImplTraitPosition::ImplSelf), ImplTraitContext::Disallowed(ImplTraitPosition::ImplSelf),
); );
(trait_ref, lowered_ty) (trait_ref, lowered_ty)
@ -400,11 +400,11 @@ impl<'hir> LoweringContext<'_, 'hir> {
generics, generics,
constness, constness,
id, id,
&ImplTraitContext::Disallowed(ImplTraitPosition::Generic), ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|this| { |this| {
let bounds = this.lower_param_bounds( let bounds = this.lower_param_bounds(
bounds, bounds,
&ImplTraitContext::Disallowed(ImplTraitPosition::Bound), ImplTraitContext::Disallowed(ImplTraitPosition::Bound),
); );
let items = this.arena.alloc_from_iter( let items = this.arena.alloc_from_iter(
items.iter().map(|item| this.lower_trait_item_ref(item)), items.iter().map(|item| this.lower_trait_item_ref(item)),
@ -420,11 +420,11 @@ impl<'hir> LoweringContext<'_, 'hir> {
generics, generics,
Const::No, Const::No,
id, id,
&ImplTraitContext::Disallowed(ImplTraitPosition::Generic), ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|this| { |this| {
this.lower_param_bounds( this.lower_param_bounds(
bounds, bounds,
&ImplTraitContext::Disallowed(ImplTraitPosition::Bound), ImplTraitContext::Disallowed(ImplTraitPosition::Bound),
) )
}, },
); );
@ -464,7 +464,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
body: Option<&Expr>, body: Option<&Expr>,
impl_trait_position: ImplTraitPosition, impl_trait_position: ImplTraitPosition,
) -> (&'hir hir::Ty<'hir>, hir::BodyId) { ) -> (&'hir hir::Ty<'hir>, hir::BodyId) {
let ty = self.lower_ty(ty, &ImplTraitContext::Disallowed(impl_trait_position)); let ty = self.lower_ty(ty, ImplTraitContext::Disallowed(impl_trait_position));
(ty, self.lower_const_body(span, body)) (ty, self.lower_const_body(span, body))
} }
@ -633,7 +633,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
let fdec = &sig.decl; let fdec = &sig.decl;
let itctx = ImplTraitContext::Universal; let itctx = ImplTraitContext::Universal;
let (generics, (fn_dec, fn_args)) = let (generics, (fn_dec, fn_args)) =
self.lower_generics(generics, Const::No, i.id, &itctx, |this| { self.lower_generics(generics, Const::No, i.id, itctx, |this| {
( (
// Disallow `impl Trait` in foreign items. // Disallow `impl Trait` in foreign items.
this.lower_fn_decl( this.lower_fn_decl(
@ -650,8 +650,8 @@ impl<'hir> LoweringContext<'_, 'hir> {
hir::ForeignItemKind::Fn(fn_dec, fn_args, generics) hir::ForeignItemKind::Fn(fn_dec, fn_args, generics)
} }
ForeignItemKind::Static(t, m, _) => { ForeignItemKind::Static(t, m, _) => {
let ty = self let ty =
.lower_ty(t, &ImplTraitContext::Disallowed(ImplTraitPosition::StaticTy)); self.lower_ty(t, ImplTraitContext::Disallowed(ImplTraitPosition::StaticTy));
hir::ForeignItemKind::Static(ty, *m) hir::ForeignItemKind::Static(ty, *m)
} }
ForeignItemKind::TyAlias(..) => hir::ForeignItemKind::Type, ForeignItemKind::TyAlias(..) => hir::ForeignItemKind::Type,
@ -722,11 +722,11 @@ impl<'hir> LoweringContext<'_, 'hir> {
qself, qself,
path, path,
ParamMode::ExplicitNamed, // no `'_` in declarations (Issue #61124) ParamMode::ExplicitNamed, // no `'_` in declarations (Issue #61124)
&ImplTraitContext::Disallowed(ImplTraitPosition::FieldTy), ImplTraitContext::Disallowed(ImplTraitPosition::FieldTy),
); );
self.arena.alloc(t) self.arena.alloc(t)
} else { } else {
self.lower_ty(&f.ty, &ImplTraitContext::Disallowed(ImplTraitPosition::FieldTy)) self.lower_ty(&f.ty, ImplTraitContext::Disallowed(ImplTraitPosition::FieldTy))
}; };
let hir_id = self.lower_node_id(f.id); let hir_id = self.lower_node_id(f.id);
self.lower_attrs(hir_id, &f.attrs); self.lower_attrs(hir_id, &f.attrs);
@ -755,12 +755,10 @@ impl<'hir> LoweringContext<'_, 'hir> {
generics, generics,
Const::No, Const::No,
i.id, i.id,
&ImplTraitContext::Disallowed(ImplTraitPosition::Generic), ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|this| { |this| {
let ty = this.lower_ty( let ty = this
ty, .lower_ty(ty, ImplTraitContext::Disallowed(ImplTraitPosition::ConstTy));
&ImplTraitContext::Disallowed(ImplTraitPosition::ConstTy),
);
let body = expr.as_ref().map(|x| this.lower_const_body(i.span, Some(x))); let body = expr.as_ref().map(|x| this.lower_const_body(i.span, Some(x)));
hir::TraitItemKind::Const(ty, body) hir::TraitItemKind::Const(ty, body)
@ -803,18 +801,18 @@ impl<'hir> LoweringContext<'_, 'hir> {
&generics, &generics,
Const::No, Const::No,
i.id, i.id,
&ImplTraitContext::Disallowed(ImplTraitPosition::Generic), ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|this| { |this| {
let ty = ty.as_ref().map(|x| { let ty = ty.as_ref().map(|x| {
this.lower_ty( this.lower_ty(
x, x,
&ImplTraitContext::Disallowed(ImplTraitPosition::AssocTy), ImplTraitContext::Disallowed(ImplTraitPosition::AssocTy),
) )
}); });
hir::TraitItemKind::Type( hir::TraitItemKind::Type(
this.lower_param_bounds( this.lower_param_bounds(
bounds, bounds,
&ImplTraitContext::Disallowed(ImplTraitPosition::Generic), ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
), ),
ty, ty,
) )
@ -882,10 +880,10 @@ impl<'hir> LoweringContext<'_, 'hir> {
generics, generics,
Const::No, Const::No,
i.id, i.id,
&ImplTraitContext::Disallowed(ImplTraitPosition::Generic), ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|this| { |this| {
let ty = this let ty =
.lower_ty(ty, &ImplTraitContext::Disallowed(ImplTraitPosition::ConstTy)); this.lower_ty(ty, ImplTraitContext::Disallowed(ImplTraitPosition::ConstTy));
let body = this.lower_const_body(i.span, expr.as_deref()); let body = this.lower_const_body(i.span, expr.as_deref());
hir::ImplItemKind::Const(ty, body) hir::ImplItemKind::Const(ty, body)
@ -916,7 +914,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
&generics, &generics,
Const::No, Const::No,
i.id, i.id,
&ImplTraitContext::Disallowed(ImplTraitPosition::Generic), ImplTraitContext::Disallowed(ImplTraitPosition::Generic),
|this| match ty { |this| match ty {
None => { None => {
let guar = this.dcx().span_delayed_bug( let guar = this.dcx().span_delayed_bug(
@ -929,7 +927,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
Some(ty) => { Some(ty) => {
let ty = this.lower_ty( let ty = this.lower_ty(
ty, ty,
&ImplTraitContext::TypeAliasesOpaqueTy { in_assoc_ty: true }, ImplTraitContext::TypeAliasesOpaqueTy { in_assoc_ty: true },
); );
hir::ImplItemKind::Type(ty) hir::ImplItemKind::Type(ty)
} }
@ -1323,7 +1321,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
// synthesize a host effect param for them. We reject `const` on them during AST validation. // synthesize a host effect param for them. We reject `const` on them during AST validation.
let constness = if kind == FnDeclKind::Inherent { sig.header.constness } else { Const::No }; let constness = if kind == FnDeclKind::Inherent { sig.header.constness } else { Const::No };
let itctx = ImplTraitContext::Universal; let itctx = ImplTraitContext::Universal;
let (generics, decl) = self.lower_generics(generics, constness, id, &itctx, |this| { let (generics, decl) = self.lower_generics(generics, constness, id, itctx, |this| {
this.lower_fn_decl(&sig.decl, id, sig.span, kind, coroutine_kind) this.lower_fn_decl(&sig.decl, id, sig.span, kind, coroutine_kind)
}); });
(generics, hir::FnSig { header, decl, span: self.lower_span(sig.span) }) (generics, hir::FnSig { header, decl, span: self.lower_span(sig.span) })
@ -1401,7 +1399,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
generics: &Generics, generics: &Generics,
constness: Const, constness: Const,
parent_node_id: NodeId, parent_node_id: NodeId,
itctx: &ImplTraitContext, itctx: ImplTraitContext,
f: impl FnOnce(&mut Self) -> T, f: impl FnOnce(&mut Self) -> T,
) -> (&'hir hir::Generics<'hir>, T) { ) -> (&'hir hir::Generics<'hir>, T) {
debug_assert!(self.impl_trait_defs.is_empty()); debug_assert!(self.impl_trait_defs.is_empty());
@ -1607,7 +1605,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
bounds: &[GenericBound], bounds: &[GenericBound],
colon_span: Option<Span>, colon_span: Option<Span>,
parent_span: Span, parent_span: Span,
itctx: &ImplTraitContext, itctx: ImplTraitContext,
origin: PredicateOrigin, origin: PredicateOrigin,
) -> Option<hir::WherePredicate<'hir>> { ) -> Option<hir::WherePredicate<'hir>> {
// Do not create a clause if we do not have anything inside it. // Do not create a clause if we do not have anything inside it.
@ -1681,10 +1679,10 @@ impl<'hir> LoweringContext<'_, 'hir> {
bound_generic_params: self bound_generic_params: self
.lower_generic_params(bound_generic_params, hir::GenericParamSource::Binder), .lower_generic_params(bound_generic_params, hir::GenericParamSource::Binder),
bounded_ty: self bounded_ty: self
.lower_ty(bounded_ty, &ImplTraitContext::Disallowed(ImplTraitPosition::Bound)), .lower_ty(bounded_ty, ImplTraitContext::Disallowed(ImplTraitPosition::Bound)),
bounds: self.lower_param_bounds( bounds: self.lower_param_bounds(
bounds, bounds,
&ImplTraitContext::Disallowed(ImplTraitPosition::Bound), ImplTraitContext::Disallowed(ImplTraitPosition::Bound),
), ),
span: self.lower_span(*span), span: self.lower_span(*span),
origin: PredicateOrigin::WhereClause, origin: PredicateOrigin::WhereClause,
@ -1695,7 +1693,7 @@ impl<'hir> LoweringContext<'_, 'hir> {
lifetime: self.lower_lifetime(lifetime), lifetime: self.lower_lifetime(lifetime),
bounds: self.lower_param_bounds( bounds: self.lower_param_bounds(
bounds, bounds,
&ImplTraitContext::Disallowed(ImplTraitPosition::Bound), ImplTraitContext::Disallowed(ImplTraitPosition::Bound),
), ),
in_where_clause: true, in_where_clause: true,
}) })
@ -1703,9 +1701,9 @@ impl<'hir> LoweringContext<'_, 'hir> {
WherePredicate::EqPredicate(WhereEqPredicate { lhs_ty, rhs_ty, span }) => { WherePredicate::EqPredicate(WhereEqPredicate { lhs_ty, rhs_ty, span }) => {
hir::WherePredicate::EqPredicate(hir::WhereEqPredicate { hir::WherePredicate::EqPredicate(hir::WhereEqPredicate {
lhs_ty: self lhs_ty: self
.lower_ty(lhs_ty, &ImplTraitContext::Disallowed(ImplTraitPosition::Bound)), .lower_ty(lhs_ty, ImplTraitContext::Disallowed(ImplTraitPosition::Bound)),
rhs_ty: self rhs_ty: self
.lower_ty(rhs_ty, &ImplTraitContext::Disallowed(ImplTraitPosition::Bound)), .lower_ty(rhs_ty, ImplTraitContext::Disallowed(ImplTraitPosition::Bound)),
span: self.lower_span(*span), span: self.lower_span(*span),
}) })
} }

View file

@ -1006,7 +1006,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
fn lower_assoc_ty_constraint( fn lower_assoc_ty_constraint(
&mut self, &mut self,
constraint: &AssocConstraint, constraint: &AssocConstraint,
itctx: &ImplTraitContext, itctx: ImplTraitContext,
) -> hir::TypeBinding<'hir> { ) -> hir::TypeBinding<'hir> {
debug!("lower_assoc_ty_constraint(constraint={:?}, itctx={:?})", constraint, itctx); debug!("lower_assoc_ty_constraint(constraint={:?}, itctx={:?})", constraint, itctx);
// lower generic arguments of identifier in constraint // lower generic arguments of identifier in constraint
@ -1085,9 +1085,9 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
hir::TypeBindingKind::Equality { term } hir::TypeBindingKind::Equality { term }
} }
AssocConstraintKind::Bound { bounds } => { AssocConstraintKind::Bound { bounds } => {
enum DesugarKind<'a> { enum DesugarKind {
ImplTrait, ImplTrait,
Error(&'a ImplTraitPosition), Error(ImplTraitPosition),
Bound, Bound,
} }
@ -1163,7 +1163,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
DesugarKind::Error(position) => { DesugarKind::Error(position) => {
let guar = self.dcx().emit_err(errors::MisplacedAssocTyBinding { let guar = self.dcx().emit_err(errors::MisplacedAssocTyBinding {
span: constraint.span, span: constraint.span,
position: DiagnosticArgFromDisplay(position), position: DiagnosticArgFromDisplay(&position),
}); });
let err_ty = let err_ty =
&*self.arena.alloc(self.ty(constraint.span, hir::TyKind::Err(guar))); &*self.arena.alloc(self.ty(constraint.span, hir::TyKind::Err(guar)));
@ -1210,7 +1210,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
fn lower_generic_arg( fn lower_generic_arg(
&mut self, &mut self,
arg: &ast::GenericArg, arg: &ast::GenericArg,
itctx: &ImplTraitContext, itctx: ImplTraitContext,
) -> hir::GenericArg<'hir> { ) -> hir::GenericArg<'hir> {
match arg { match arg {
ast::GenericArg::Lifetime(lt) => GenericArg::Lifetime(self.lower_lifetime(lt)), ast::GenericArg::Lifetime(lt) => GenericArg::Lifetime(self.lower_lifetime(lt)),
@ -1289,7 +1289,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
} }
#[instrument(level = "debug", skip(self))] #[instrument(level = "debug", skip(self))]
fn lower_ty(&mut self, t: &Ty, itctx: &ImplTraitContext) -> &'hir hir::Ty<'hir> { fn lower_ty(&mut self, t: &Ty, itctx: ImplTraitContext) -> &'hir hir::Ty<'hir> {
self.arena.alloc(self.lower_ty_direct(t, itctx)) self.arena.alloc(self.lower_ty_direct(t, itctx))
} }
@ -1299,7 +1299,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
qself: &Option<ptr::P<QSelf>>, qself: &Option<ptr::P<QSelf>>,
path: &Path, path: &Path,
param_mode: ParamMode, param_mode: ParamMode,
itctx: &ImplTraitContext, itctx: ImplTraitContext,
) -> hir::Ty<'hir> { ) -> hir::Ty<'hir> {
// Check whether we should interpret this as a bare trait object. // Check whether we should interpret this as a bare trait object.
// This check mirrors the one in late resolution. We only introduce this special case in // This check mirrors the one in late resolution. We only introduce this special case in
@ -1341,7 +1341,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
self.ty(span, hir::TyKind::Tup(tys)) self.ty(span, hir::TyKind::Tup(tys))
} }
fn lower_ty_direct(&mut self, t: &Ty, itctx: &ImplTraitContext) -> hir::Ty<'hir> { fn lower_ty_direct(&mut self, t: &Ty, itctx: ImplTraitContext) -> hir::Ty<'hir> {
let kind = match &t.kind { let kind = match &t.kind {
TyKind::Infer => hir::TyKind::Infer, TyKind::Infer => hir::TyKind::Infer,
TyKind::Err => { TyKind::Err => {
@ -1460,13 +1460,13 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
ImplTraitContext::ReturnPositionOpaqueTy { origin, fn_kind } => self ImplTraitContext::ReturnPositionOpaqueTy { origin, fn_kind } => self
.lower_opaque_impl_trait( .lower_opaque_impl_trait(
span, span,
*origin, origin,
*def_node_id, *def_node_id,
bounds, bounds,
Some(*fn_kind), Some(fn_kind),
itctx, itctx,
), ),
&ImplTraitContext::TypeAliasesOpaqueTy { in_assoc_ty } => self ImplTraitContext::TypeAliasesOpaqueTy { in_assoc_ty } => self
.lower_opaque_impl_trait( .lower_opaque_impl_trait(
span, span,
hir::OpaqueTyOrigin::TyAlias { in_assoc_ty }, hir::OpaqueTyOrigin::TyAlias { in_assoc_ty },
@ -1513,9 +1513,9 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
.create_feature_err( .create_feature_err(
MisplacedImplTrait { MisplacedImplTrait {
span: t.span, span: t.span,
position: DiagnosticArgFromDisplay(position), position: DiagnosticArgFromDisplay(&position),
}, },
*feature, feature,
) )
.emit(); .emit();
hir::TyKind::Err(guar) hir::TyKind::Err(guar)
@ -1523,7 +1523,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
ImplTraitContext::Disallowed(position) => { ImplTraitContext::Disallowed(position) => {
let guar = self.dcx().emit_err(MisplacedImplTrait { let guar = self.dcx().emit_err(MisplacedImplTrait {
span: t.span, span: t.span,
position: DiagnosticArgFromDisplay(position), position: DiagnosticArgFromDisplay(&position),
}); });
hir::TyKind::Err(guar) hir::TyKind::Err(guar)
} }
@ -1581,7 +1581,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
opaque_ty_node_id: NodeId, opaque_ty_node_id: NodeId,
bounds: &GenericBounds, bounds: &GenericBounds,
fn_kind: Option<FnDeclKind>, fn_kind: Option<FnDeclKind>,
itctx: &ImplTraitContext, itctx: ImplTraitContext,
) -> hir::TyKind<'hir> { ) -> hir::TyKind<'hir> {
// Make sure we know that some funky desugaring has been going on here. // Make sure we know that some funky desugaring has been going on here.
// This is a first: there is code in other places like for loop // This is a first: there is code in other places like for loop
@ -1848,7 +1848,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
ImplTraitContext::Disallowed(ImplTraitPosition::PointerParam) ImplTraitContext::Disallowed(ImplTraitPosition::PointerParam)
} }
}; };
self.lower_ty_direct(&param.ty, &itctx) self.lower_ty_direct(&param.ty, itctx)
})); }));
let output = match coro { let output = match coro {
@ -1876,7 +1876,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
ImplTraitContext::Disallowed(ImplTraitPosition::PointerReturn) ImplTraitContext::Disallowed(ImplTraitPosition::PointerReturn)
} }
}; };
hir::FnRetTy::Return(self.lower_ty(ty, &itctx)) hir::FnRetTy::Return(self.lower_ty(ty, itctx))
} }
FnRetTy::Default(span) => hir::FnRetTy::DefaultReturn(self.lower_span(*span)), FnRetTy::Default(span) => hir::FnRetTy::DefaultReturn(self.lower_span(*span)),
}, },
@ -1977,7 +1977,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
output: &FnRetTy, output: &FnRetTy,
coro: CoroutineKind, coro: CoroutineKind,
opaque_ty_span: Span, opaque_ty_span: Span,
nested_impl_trait_context: ImplTraitContext, itctx: ImplTraitContext,
) -> hir::GenericBound<'hir> { ) -> hir::GenericBound<'hir> {
// Compute the `T` in `Future<Output = T>` from the return type. // Compute the `T` in `Future<Output = T>` from the return type.
let output_ty = match output { let output_ty = match output {
@ -1985,7 +1985,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
// Not `OpaqueTyOrigin::AsyncFn`: that's only used for the // Not `OpaqueTyOrigin::AsyncFn`: that's only used for the
// `impl Future` opaque type that `async fn` implicitly // `impl Future` opaque type that `async fn` implicitly
// generates. // generates.
self.lower_ty(ty, &nested_impl_trait_context) self.lower_ty(ty, itctx)
} }
FnRetTy::Default(ret_ty_span) => self.arena.alloc(self.ty_tup(*ret_ty_span, &[])), FnRetTy::Default(ret_ty_span) => self.arena.alloc(self.ty_tup(*ret_ty_span, &[])),
}; };
@ -2025,7 +2025,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
fn lower_param_bound( fn lower_param_bound(
&mut self, &mut self,
tpb: &GenericBound, tpb: &GenericBound,
itctx: &ImplTraitContext, itctx: ImplTraitContext,
) -> hir::GenericBound<'hir> { ) -> hir::GenericBound<'hir> {
match tpb { match tpb {
GenericBound::Trait(p, modifiers) => hir::GenericBound::Trait( GenericBound::Trait(p, modifiers) => hir::GenericBound::Trait(
@ -2164,7 +2164,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
.map(|def| { .map(|def| {
self.lower_ty( self.lower_ty(
def, def,
&ImplTraitContext::Disallowed(ImplTraitPosition::GenericDefault), ImplTraitContext::Disallowed(ImplTraitPosition::GenericDefault),
) )
}); });
@ -2174,7 +2174,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
} }
GenericParamKind::Const { ty, kw_span: _, default } => { GenericParamKind::Const { ty, kw_span: _, default } => {
let ty = self let ty = self
.lower_ty(ty, &ImplTraitContext::Disallowed(ImplTraitPosition::GenericDefault)); .lower_ty(ty, ImplTraitContext::Disallowed(ImplTraitPosition::GenericDefault));
// Not only do we deny const param defaults in binders but we also map them to `None` // Not only do we deny const param defaults in binders but we also map them to `None`
// since later compiler stages cannot handle them (and shouldn't need to be able to). // since later compiler stages cannot handle them (and shouldn't need to be able to).
@ -2204,7 +2204,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
&mut self, &mut self,
modifiers: ast::TraitBoundModifiers, modifiers: ast::TraitBoundModifiers,
p: &TraitRef, p: &TraitRef,
itctx: &ImplTraitContext, itctx: ImplTraitContext,
) -> hir::TraitRef<'hir> { ) -> hir::TraitRef<'hir> {
let path = match self.lower_qpath( let path = match self.lower_qpath(
p.ref_id, p.ref_id,
@ -2224,7 +2224,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
fn lower_poly_trait_ref( fn lower_poly_trait_ref(
&mut self, &mut self,
p: &PolyTraitRef, p: &PolyTraitRef,
itctx: &ImplTraitContext, itctx: ImplTraitContext,
modifiers: ast::TraitBoundModifiers, modifiers: ast::TraitBoundModifiers,
) -> hir::PolyTraitRef<'hir> { ) -> hir::PolyTraitRef<'hir> {
let bound_generic_params = let bound_generic_params =
@ -2233,7 +2233,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
hir::PolyTraitRef { bound_generic_params, trait_ref, span: self.lower_span(p.span) } hir::PolyTraitRef { bound_generic_params, trait_ref, span: self.lower_span(p.span) }
} }
fn lower_mt(&mut self, mt: &MutTy, itctx: &ImplTraitContext) -> hir::MutTy<'hir> { fn lower_mt(&mut self, mt: &MutTy, itctx: ImplTraitContext) -> hir::MutTy<'hir> {
hir::MutTy { ty: self.lower_ty(&mt.ty, itctx), mutbl: mt.mutbl } hir::MutTy { ty: self.lower_ty(&mt.ty, itctx), mutbl: mt.mutbl }
} }
@ -2241,7 +2241,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
fn lower_param_bounds( fn lower_param_bounds(
&mut self, &mut self,
bounds: &[GenericBound], bounds: &[GenericBound],
itctx: &ImplTraitContext, itctx: ImplTraitContext,
) -> hir::GenericBounds<'hir> { ) -> hir::GenericBounds<'hir> {
self.arena.alloc_from_iter(self.lower_param_bounds_mut(bounds, itctx)) self.arena.alloc_from_iter(self.lower_param_bounds_mut(bounds, itctx))
} }
@ -2249,7 +2249,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
fn lower_param_bounds_mut<'s>( fn lower_param_bounds_mut<'s>(
&'s mut self, &'s mut self,
bounds: &'s [GenericBound], bounds: &'s [GenericBound],
itctx: &'s ImplTraitContext, itctx: ImplTraitContext,
) -> impl Iterator<Item = hir::GenericBound<'hir>> + Captures<'s> + Captures<'a> { ) -> impl Iterator<Item = hir::GenericBound<'hir>> + Captures<'s> + Captures<'a> {
bounds.iter().map(move |bound| self.lower_param_bound(bound, itctx)) bounds.iter().map(move |bound| self.lower_param_bound(bound, itctx))
} }
@ -2285,7 +2285,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
bounds, bounds,
/* colon_span */ None, /* colon_span */ None,
span, span,
&ImplTraitContext::Universal, ImplTraitContext::Universal,
hir::PredicateOrigin::ImplTrait, hir::PredicateOrigin::ImplTrait,
); );

View file

@ -38,7 +38,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
qself, qself,
path, path,
ParamMode::Optional, ParamMode::Optional,
&ImplTraitContext::Disallowed(ImplTraitPosition::Path), ImplTraitContext::Disallowed(ImplTraitPosition::Path),
None, None,
); );
let (pats, ddpos) = self.lower_pat_tuple(pats, "tuple struct"); let (pats, ddpos) = self.lower_pat_tuple(pats, "tuple struct");
@ -55,7 +55,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
qself, qself,
path, path,
ParamMode::Optional, ParamMode::Optional,
&ImplTraitContext::Disallowed(ImplTraitPosition::Path), ImplTraitContext::Disallowed(ImplTraitPosition::Path),
None, None,
); );
break hir::PatKind::Path(qpath); break hir::PatKind::Path(qpath);
@ -66,7 +66,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
qself, qself,
path, path,
ParamMode::Optional, ParamMode::Optional,
&ImplTraitContext::Disallowed(ImplTraitPosition::Path), ImplTraitContext::Disallowed(ImplTraitPosition::Path),
None, None,
); );

View file

@ -27,7 +27,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
qself: &Option<ptr::P<QSelf>>, qself: &Option<ptr::P<QSelf>>,
p: &Path, p: &Path,
param_mode: ParamMode, param_mode: ParamMode,
itctx: &ImplTraitContext, itctx: ImplTraitContext,
// modifiers of the impl/bound if this is a trait path // modifiers of the impl/bound if this is a trait path
modifiers: Option<ast::TraitBoundModifiers>, modifiers: Option<ast::TraitBoundModifiers>,
) -> hir::QPath<'hir> { ) -> hir::QPath<'hir> {
@ -205,7 +205,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
segment, segment,
param_mode, param_mode,
ParenthesizedGenericArgs::Err, ParenthesizedGenericArgs::Err,
&ImplTraitContext::Disallowed(ImplTraitPosition::Path), ImplTraitContext::Disallowed(ImplTraitPosition::Path),
None, None,
None, None,
) )
@ -220,7 +220,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
segment: &PathSegment, segment: &PathSegment,
param_mode: ParamMode, param_mode: ParamMode,
parenthesized_generic_args: ParenthesizedGenericArgs, parenthesized_generic_args: ParenthesizedGenericArgs,
itctx: &ImplTraitContext, itctx: ImplTraitContext,
constness: Option<ast::BoundConstness>, constness: Option<ast::BoundConstness>,
// Additional features ungated with a bound modifier like `async`. // Additional features ungated with a bound modifier like `async`.
// This is passed down to the implicit associated type binding in // This is passed down to the implicit associated type binding in
@ -374,7 +374,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
&mut self, &mut self,
data: &AngleBracketedArgs, data: &AngleBracketedArgs,
param_mode: ParamMode, param_mode: ParamMode,
itctx: &ImplTraitContext, itctx: ImplTraitContext,
) -> (GenericArgsCtor<'hir>, bool) { ) -> (GenericArgsCtor<'hir>, bool) {
let has_non_lt_args = data.args.iter().any(|arg| match arg { let has_non_lt_args = data.args.iter().any(|arg| match arg {
AngleBracketedArg::Arg(ast::GenericArg::Lifetime(_)) AngleBracketedArg::Arg(ast::GenericArg::Lifetime(_))
@ -405,7 +405,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
fn lower_parenthesized_parameter_data( fn lower_parenthesized_parameter_data(
&mut self, &mut self,
data: &ParenthesizedArgs, data: &ParenthesizedArgs,
itctx: &ImplTraitContext, itctx: ImplTraitContext,
bound_modifier_allowed_features: Option<Lrc<[Symbol]>>, bound_modifier_allowed_features: Option<Lrc<[Symbol]>>,
) -> (GenericArgsCtor<'hir>, bool) { ) -> (GenericArgsCtor<'hir>, bool) {
// Switch to `PassThrough` mode for anonymous lifetimes; this // Switch to `PassThrough` mode for anonymous lifetimes; this
@ -415,7 +415,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
// we generally don't permit such things (see #51008). // we generally don't permit such things (see #51008).
let ParenthesizedArgs { span, inputs, inputs_span, output } = data; let ParenthesizedArgs { span, inputs, inputs_span, output } = data;
let inputs = self.arena.alloc_from_iter(inputs.iter().map(|ty| { let inputs = self.arena.alloc_from_iter(inputs.iter().map(|ty| {
self.lower_ty_direct(ty, &ImplTraitContext::Disallowed(ImplTraitPosition::FnTraitParam)) self.lower_ty_direct(ty, ImplTraitContext::Disallowed(ImplTraitPosition::FnTraitParam))
})); }));
let output_ty = match output { let output_ty = match output {
// Only allow `impl Trait` in return position. i.e.: // Only allow `impl Trait` in return position. i.e.:
@ -429,7 +429,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
} else { } else {
self.lower_ty( self.lower_ty(
ty, ty,
&ImplTraitContext::FeatureGated( ImplTraitContext::FeatureGated(
ImplTraitPosition::FnTraitReturn, ImplTraitPosition::FnTraitReturn,
sym::impl_trait_in_fn_trait_return, sym::impl_trait_in_fn_trait_return,
), ),
@ -437,7 +437,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> {
} }
} }
FnRetTy::Ty(ty) => { FnRetTy::Ty(ty) => {
self.lower_ty(ty, &ImplTraitContext::Disallowed(ImplTraitPosition::FnTraitReturn)) self.lower_ty(ty, ImplTraitContext::Disallowed(ImplTraitPosition::FnTraitReturn))
} }
FnRetTy::Default(_) => self.arena.alloc(self.ty_tup(*span, &[])), FnRetTy::Default(_) => self.arena.alloc(self.ty_tup(*span, &[])),
}; };