diff options
| author | Michael Goulet <michael@errs.io> | 2024-03-06 18:44:55 +0000 |
|---|---|---|
| committer | Michael Goulet <michael@errs.io> | 2024-03-08 02:10:11 +0000 |
| commit | 99df5a2b425c12ece7fd241f410719f7dfd2da97 (patch) | |
| tree | d5db76eadb5eba6327c419750cd180da2a32b94c | |
| parent | cf299ddb6e0f1b0ddc737805df49952d41e03754 (diff) | |
| download | rust-99df5a2b425c12ece7fd241f410719f7dfd2da97.tar.gz rust-99df5a2b425c12ece7fd241f410719f7dfd2da97.zip | |
Simplify ImplTraitContext
| -rw-r--r-- | compiler/rustc_ast_lowering/src/item.rs | 6 | ||||
| -rw-r--r-- | compiler/rustc_ast_lowering/src/lib.rs | 43 | ||||
| -rw-r--r-- | compiler/rustc_ast_lowering/src/path.rs | 2 |
3 files changed, 22 insertions, 29 deletions
diff --git a/compiler/rustc_ast_lowering/src/item.rs b/compiler/rustc_ast_lowering/src/item.rs index fbd35dd07ef..52300138186 100644 --- a/compiler/rustc_ast_lowering/src/item.rs +++ b/compiler/rustc_ast_lowering/src/item.rs @@ -275,11 +275,12 @@ impl<'hir> LoweringContext<'_, 'hir> { } Some(ty) => this.lower_ty( ty, - ImplTraitContext::TypeAliasesOpaqueTy { + ImplTraitContext::OpaqueTy { origin: hir::OpaqueTyOrigin::TyAlias { parent: this.local_def_id(id), in_assoc_ty: false, }, + fn_kind: None, }, ), }, @@ -941,11 +942,12 @@ impl<'hir> LoweringContext<'_, 'hir> { Some(ty) => { let ty = this.lower_ty( ty, - ImplTraitContext::TypeAliasesOpaqueTy { + ImplTraitContext::OpaqueTy { origin: hir::OpaqueTyOrigin::TyAlias { parent: this.local_def_id(i.id), in_assoc_ty: true, }, + fn_kind: None, }, ); hir::ImplItemKind::Type(ty) diff --git a/compiler/rustc_ast_lowering/src/lib.rs b/compiler/rustc_ast_lowering/src/lib.rs index 584f8b46911..94e1e06a954 100644 --- a/compiler/rustc_ast_lowering/src/lib.rs +++ b/compiler/rustc_ast_lowering/src/lib.rs @@ -265,15 +265,11 @@ enum ImplTraitContext { /// Example: `fn foo() -> impl Debug`, where `impl Debug` is conceptually /// equivalent to a new opaque type like `type T = impl Debug; fn foo() -> T`. /// - ReturnPositionOpaqueTy { - /// Origin: Either OpaqueTyOrigin::FnReturn or OpaqueTyOrigin::AsyncFn, - origin: hir::OpaqueTyOrigin, - fn_kind: FnDeclKind, - }, - /// Impl trait in type aliases. - TypeAliasesOpaqueTy { - /// Origin: Always OpaqueTyOrigin::TypeAliasImplTrait + OpaqueTy { origin: hir::OpaqueTyOrigin, + /// Only used to change the lifetime capture rules, since + /// RPITIT captures all in scope, RPIT does not. + fn_kind: Option<FnDeclKind>, }, /// `impl Trait` is unstably accepted in this position. FeatureGated(ImplTraitPosition, Symbol), @@ -1078,9 +1074,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { // Disallow ATB in dyn types if self.is_in_dyn_type { let suggestion = match itctx { - ImplTraitContext::ReturnPositionOpaqueTy { .. } - | ImplTraitContext::TypeAliasesOpaqueTy { .. } - | ImplTraitContext::Universal => { + ImplTraitContext::OpaqueTy { .. } | ImplTraitContext::Universal => { let bound_end_span = constraint .gen_args .as_ref() @@ -1420,17 +1414,14 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { TyKind::ImplTrait(def_node_id, bounds) => { let span = t.span; match itctx { - ImplTraitContext::ReturnPositionOpaqueTy { origin, fn_kind } => self - .lower_opaque_impl_trait( - span, - origin, - *def_node_id, - bounds, - Some(fn_kind), - itctx, - ), - ImplTraitContext::TypeAliasesOpaqueTy { origin } => self - .lower_opaque_impl_trait(span, origin, *def_node_id, bounds, None, itctx), + ImplTraitContext::OpaqueTy { origin, fn_kind } => self.lower_opaque_impl_trait( + span, + origin, + *def_node_id, + bounds, + fn_kind, + itctx, + ), ImplTraitContext::Universal => { let span = t.span; @@ -1824,9 +1815,9 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { FnDeclKind::Fn | FnDeclKind::Inherent | FnDeclKind::Trait - | FnDeclKind::Impl => ImplTraitContext::ReturnPositionOpaqueTy { + | FnDeclKind::Impl => ImplTraitContext::OpaqueTy { origin: hir::OpaqueTyOrigin::FnReturn(self.local_def_id(fn_node_id)), - fn_kind: kind, + fn_kind: Some(kind), }, FnDeclKind::ExternFn => { ImplTraitContext::Disallowed(ImplTraitPosition::ExternFnReturn) @@ -1920,9 +1911,9 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { output, coro, opaque_ty_span, - ImplTraitContext::ReturnPositionOpaqueTy { + ImplTraitContext::OpaqueTy { origin: hir::OpaqueTyOrigin::FnReturn(fn_def_id), - fn_kind, + fn_kind: Some(fn_kind), }, ); arena_vec![this; bound] diff --git a/compiler/rustc_ast_lowering/src/path.rs b/compiler/rustc_ast_lowering/src/path.rs index 48941a232c2..aeeb4bf9e76 100644 --- a/compiler/rustc_ast_lowering/src/path.rs +++ b/compiler/rustc_ast_lowering/src/path.rs @@ -423,7 +423,7 @@ impl<'a, 'hir> LoweringContext<'a, 'hir> { // fn f(_: impl Fn() -> impl Debug) -> impl Fn() -> impl Debug // // disallowed --^^^^^^^^^^ allowed --^^^^^^^^^^ // ``` - FnRetTy::Ty(ty) if matches!(itctx, ImplTraitContext::ReturnPositionOpaqueTy { .. }) => { + FnRetTy::Ty(ty) if matches!(itctx, ImplTraitContext::OpaqueTy { .. }) => { if self.tcx.features().impl_trait_in_fn_trait_return { self.lower_ty(ty, itctx) } else { |
