RPITIT placeholder items
This commit is contained in:
parent
c6861df836
commit
78b962a4f3
21 changed files with 70 additions and 2 deletions
|
@ -109,6 +109,8 @@ pub enum DefKind {
|
|||
InlineConst,
|
||||
/// Opaque type, aka `impl Trait`.
|
||||
OpaqueTy,
|
||||
/// A return-position `impl Trait` in a trait definition
|
||||
ImplTraitPlaceholder,
|
||||
Field,
|
||||
/// Lifetime parameter: the `'a` in `struct Foo<'a> { ... }`
|
||||
LifetimeParam,
|
||||
|
@ -138,6 +140,7 @@ impl DefKind {
|
|||
panic!("impossible struct constructor")
|
||||
}
|
||||
DefKind::OpaqueTy => "opaque type",
|
||||
DefKind::ImplTraitPlaceholder => "opaque type in trait",
|
||||
DefKind::TyAlias => "type alias",
|
||||
DefKind::TraitAlias => "trait alias",
|
||||
DefKind::AssocTy => "associated type",
|
||||
|
@ -190,6 +193,7 @@ impl DefKind {
|
|||
| DefKind::Variant
|
||||
| DefKind::Trait
|
||||
| DefKind::OpaqueTy
|
||||
| DefKind::ImplTraitPlaceholder
|
||||
| DefKind::TyAlias
|
||||
| DefKind::ForeignTy
|
||||
| DefKind::TraitAlias
|
||||
|
@ -254,6 +258,7 @@ impl DefKind {
|
|||
| DefKind::Use
|
||||
| DefKind::ForeignMod
|
||||
| DefKind::OpaqueTy
|
||||
| DefKind::ImplTraitPlaceholder
|
||||
| DefKind::Impl
|
||||
| DefKind::Field
|
||||
| DefKind::TyParam
|
||||
|
|
|
@ -2518,6 +2518,12 @@ pub enum OpaqueTyOrigin {
|
|||
TyAlias,
|
||||
}
|
||||
|
||||
/// Placeholder representation of an `impl Trait` in a trait. Since this never gets lowered into a `ty::Opaque` of its own, we just keep this as
|
||||
#[derive(Debug, HashStable_Generic)]
|
||||
pub struct ImplTraitPlaceholder<'hir> {
|
||||
pub bounds: GenericBounds<'hir>,
|
||||
}
|
||||
|
||||
/// The various kinds of types recognized by the compiler.
|
||||
#[derive(Debug, HashStable_Generic)]
|
||||
pub enum TyKind<'hir> {
|
||||
|
@ -2545,6 +2551,8 @@ pub enum TyKind<'hir> {
|
|||
/// The generic argument list contains the lifetimes (and in the future
|
||||
/// possibly parameters) that are actually bound on the `impl Trait`.
|
||||
OpaqueDef(ItemId, &'hir [GenericArg<'hir>]),
|
||||
/// The placeholder
|
||||
ImplTraitInTrait(ItemId),
|
||||
/// A trait object type `Bound1 + Bound2 + Bound3`
|
||||
/// where `Bound` is a trait or a lifetime.
|
||||
TraitObject(&'hir [PolyTraitRef<'hir>], &'hir Lifetime, TraitObjectSyntax),
|
||||
|
@ -3000,6 +3008,8 @@ pub enum ItemKind<'hir> {
|
|||
TyAlias(&'hir Ty<'hir>, &'hir Generics<'hir>),
|
||||
/// An opaque `impl Trait` type alias, e.g., `type Foo = impl Bar;`.
|
||||
OpaqueTy(OpaqueTy<'hir>),
|
||||
/// An `impl Trait` in a trait
|
||||
ImplTraitPlaceholder(ImplTraitPlaceholder<'hir>),
|
||||
/// An enum definition, e.g., `enum Foo<A, B> {C<A>, D<B>}`.
|
||||
Enum(EnumDef<'hir>, &'hir Generics<'hir>),
|
||||
/// A struct definition, e.g., `struct Foo<A> {x: A}`.
|
||||
|
@ -3068,6 +3078,7 @@ impl ItemKind<'_> {
|
|||
ItemKind::Trait(..) => "trait",
|
||||
ItemKind::TraitAlias(..) => "trait alias",
|
||||
ItemKind::Impl(..) => "implementation",
|
||||
ItemKind::ImplTraitPlaceholder(..) => "opaque type in trait",
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -562,6 +562,10 @@ pub fn walk_item<'v, V: Visitor<'v>>(visitor: &mut V, item: &'v Item<'v>) {
|
|||
walk_generics(visitor, generics);
|
||||
walk_list!(visitor, visit_param_bound, bounds);
|
||||
}
|
||||
ItemKind::ImplTraitPlaceholder(ImplTraitPlaceholder { bounds }) => {
|
||||
visitor.visit_id(item.hir_id());
|
||||
walk_list!(visitor, visit_param_bound, bounds);
|
||||
}
|
||||
ItemKind::Enum(ref enum_definition, ref generics) => {
|
||||
visitor.visit_generics(generics);
|
||||
// `visit_enum_def()` takes care of visiting the `Item`'s `HirId`.
|
||||
|
@ -674,6 +678,9 @@ pub fn walk_ty<'v, V: Visitor<'v>>(visitor: &mut V, typ: &'v Ty<'v>) {
|
|||
visitor.visit_nested_item(item_id);
|
||||
walk_list!(visitor, visit_generic_arg, lifetimes);
|
||||
}
|
||||
TyKind::ImplTraitInTrait(item_id) => {
|
||||
visitor.visit_nested_item(item_id);
|
||||
}
|
||||
TyKind::Array(ref ty, ref length) => {
|
||||
visitor.visit_ty(ty);
|
||||
visitor.visit_array_length(length)
|
||||
|
|
|
@ -36,6 +36,7 @@ pub enum Target {
|
|||
GlobalAsm,
|
||||
TyAlias,
|
||||
OpaqueTy,
|
||||
ImplTraitPlaceholder,
|
||||
Enum,
|
||||
Variant,
|
||||
Struct,
|
||||
|
@ -80,6 +81,7 @@ impl Target {
|
|||
ItemKind::GlobalAsm(..) => Target::GlobalAsm,
|
||||
ItemKind::TyAlias(..) => Target::TyAlias,
|
||||
ItemKind::OpaqueTy(..) => Target::OpaqueTy,
|
||||
ItemKind::ImplTraitPlaceholder(..) => Target::ImplTraitPlaceholder,
|
||||
ItemKind::Enum(..) => Target::Enum,
|
||||
ItemKind::Struct(..) => Target::Struct,
|
||||
ItemKind::Union(..) => Target::Union,
|
||||
|
@ -157,6 +159,7 @@ impl Target {
|
|||
Target::GlobalAsm => "global asm",
|
||||
Target::TyAlias => "type alias",
|
||||
Target::OpaqueTy => "opaque type",
|
||||
Target::ImplTraitPlaceholder => "opaque type in trait",
|
||||
Target::Enum => "enum",
|
||||
Target::Variant => "enum variant",
|
||||
Target::Struct => "struct",
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue