@@ -2655,6 +2655,35 @@ impl Default for FnHeader {
26552655 }
26562656}
26572657
2658+ #[ derive( Clone , Encodable , Decodable , Debug ) ]
2659+ pub struct TraitKind (
2660+ pub IsAuto ,
2661+ pub Unsafe ,
2662+ pub Generics ,
2663+ pub GenericBounds ,
2664+ pub Vec < P < AssocItem > > ,
2665+ ) ;
2666+ #[ derive( Clone , Encodable , Decodable , Debug ) ]
2667+ pub struct TyAliasKind ( pub Defaultness , pub Generics , pub GenericBounds , pub Option < P < Ty > > ) ;
2668+
2669+ #[ derive( Clone , Encodable , Decodable , Debug ) ]
2670+ pub struct ImplKind {
2671+ pub unsafety : Unsafe ,
2672+ pub polarity : ImplPolarity ,
2673+ pub defaultness : Defaultness ,
2674+ pub constness : Const ,
2675+ pub generics : Generics ,
2676+
2677+ /// The trait being implemented, if any.
2678+ pub of_trait : Option < TraitRef > ,
2679+
2680+ pub self_ty : P < Ty > ,
2681+ pub items : Vec < P < AssocItem > > ,
2682+ }
2683+
2684+ #[ derive( Clone , Encodable , Decodable , Debug ) ]
2685+ pub struct FnKind ( pub Defaultness , pub FnSig , pub Generics , pub Option < P < Block > > ) ;
2686+
26582687#[ derive( Clone , Encodable , Decodable , Debug ) ]
26592688pub enum ItemKind {
26602689 /// An `extern crate` item, with the optional *original* crate name if the crate was renamed.
@@ -2676,7 +2705,7 @@ pub enum ItemKind {
26762705 /// A function declaration (`fn`).
26772706 ///
26782707 /// E.g., `fn foo(bar: usize) -> usize { .. }`.
2679- Fn ( Defaultness , FnSig , Generics , Option < P < Block > > ) ,
2708+ Fn ( Box < FnKind > ) ,
26802709 /// A module declaration (`mod`).
26812710 ///
26822711 /// E.g., `mod foo;` or `mod foo { .. }`.
@@ -2690,7 +2719,7 @@ pub enum ItemKind {
26902719 /// A type alias (`type`).
26912720 ///
26922721 /// E.g., `type Foo = Bar<u8>;`.
2693- TyAlias ( Defaultness , Generics , GenericBounds , Option < P < Ty > > ) ,
2722+ TyAlias ( Box < TyAliasKind > ) ,
26942723 /// An enum definition (`enum`).
26952724 ///
26962725 /// E.g., `enum Foo<A, B> { C<A>, D<B> }`.
@@ -2706,27 +2735,15 @@ pub enum ItemKind {
27062735 /// A trait declaration (`trait`).
27072736 ///
27082737 /// E.g., `trait Foo { .. }`, `trait Foo<T> { .. }` or `auto trait Foo {}`.
2709- Trait ( IsAuto , Unsafe , Generics , GenericBounds , Vec < P < AssocItem > > ) ,
2738+ Trait ( Box < TraitKind > ) ,
27102739 /// Trait alias
27112740 ///
27122741 /// E.g., `trait Foo = Bar + Quux;`.
27132742 TraitAlias ( Generics , GenericBounds ) ,
27142743 /// An implementation.
27152744 ///
27162745 /// E.g., `impl<A> Foo<A> { .. }` or `impl<A> Trait for Foo<A> { .. }`.
2717- Impl {
2718- unsafety : Unsafe ,
2719- polarity : ImplPolarity ,
2720- defaultness : Defaultness ,
2721- constness : Const ,
2722- generics : Generics ,
2723-
2724- /// The trait being implemented, if any.
2725- of_trait : Option < TraitRef > ,
2726-
2727- self_ty : P < Ty > ,
2728- items : Vec < P < AssocItem > > ,
2729- } ,
2746+ Impl ( Box < ImplKind > ) ,
27302747 /// A macro invocation.
27312748 ///
27322749 /// E.g., `foo!(..)`.
@@ -2770,14 +2787,14 @@ impl ItemKind {
27702787
27712788 pub fn generics ( & self ) -> Option < & Generics > {
27722789 match self {
2773- Self :: Fn ( _, _, generics, _)
2774- | Self :: TyAlias ( _, generics, ..)
2790+ Self :: Fn ( box FnKind ( _, _, generics, _) )
2791+ | Self :: TyAlias ( box TyAliasKind ( _, generics, ..) )
27752792 | Self :: Enum ( _, generics)
27762793 | Self :: Struct ( _, generics)
27772794 | Self :: Union ( _, generics)
2778- | Self :: Trait ( _, _, generics, ..)
2795+ | Self :: Trait ( box TraitKind ( _, _, generics, ..) )
27792796 | Self :: TraitAlias ( generics, _)
2780- | Self :: Impl { generics, .. } => Some ( generics) ,
2797+ | Self :: Impl ( box ImplKind { generics, .. } ) => Some ( generics) ,
27812798 _ => None ,
27822799 }
27832800 }
@@ -2800,17 +2817,19 @@ pub enum AssocItemKind {
28002817 /// If `def` is parsed, then the constant is provided, and otherwise required.
28012818 Const ( Defaultness , P < Ty > , Option < P < Expr > > ) ,
28022819 /// An associated function.
2803- Fn ( Defaultness , FnSig , Generics , Option < P < Block > > ) ,
2820+ Fn ( Box < FnKind > ) ,
28042821 /// An associated type.
2805- TyAlias ( Defaultness , Generics , GenericBounds , Option < P < Ty > > ) ,
2822+ TyAlias ( Box < TyAliasKind > ) ,
28062823 /// A macro expanding to associated items.
28072824 MacCall ( MacCall ) ,
28082825}
28092826
28102827impl AssocItemKind {
28112828 pub fn defaultness ( & self ) -> Defaultness {
28122829 match * self {
2813- Self :: Const ( def, ..) | Self :: Fn ( def, ..) | Self :: TyAlias ( def, ..) => def,
2830+ Self :: Const ( def, ..)
2831+ | Self :: Fn ( box FnKind ( def, ..) )
2832+ | Self :: TyAlias ( box TyAliasKind ( def, ..) ) => def,
28142833 Self :: MacCall ( ..) => Defaultness :: Final ,
28152834 }
28162835 }
@@ -2820,8 +2839,8 @@ impl From<AssocItemKind> for ItemKind {
28202839 fn from ( assoc_item_kind : AssocItemKind ) -> ItemKind {
28212840 match assoc_item_kind {
28222841 AssocItemKind :: Const ( a, b, c) => ItemKind :: Const ( a, b, c) ,
2823- AssocItemKind :: Fn ( a , b , c , d ) => ItemKind :: Fn ( a , b , c , d ) ,
2824- AssocItemKind :: TyAlias ( a , b , c , d ) => ItemKind :: TyAlias ( a , b , c , d ) ,
2842+ AssocItemKind :: Fn ( fn_kind ) => ItemKind :: Fn ( fn_kind ) ,
2843+ AssocItemKind :: TyAlias ( ty_alias_kind ) => ItemKind :: TyAlias ( ty_alias_kind ) ,
28252844 AssocItemKind :: MacCall ( a) => ItemKind :: MacCall ( a) ,
28262845 }
28272846 }
@@ -2833,8 +2852,8 @@ impl TryFrom<ItemKind> for AssocItemKind {
28332852 fn try_from ( item_kind : ItemKind ) -> Result < AssocItemKind , ItemKind > {
28342853 Ok ( match item_kind {
28352854 ItemKind :: Const ( a, b, c) => AssocItemKind :: Const ( a, b, c) ,
2836- ItemKind :: Fn ( a , b , c , d ) => AssocItemKind :: Fn ( a , b , c , d ) ,
2837- ItemKind :: TyAlias ( a , b , c , d ) => AssocItemKind :: TyAlias ( a , b , c , d ) ,
2855+ ItemKind :: Fn ( fn_kind ) => AssocItemKind :: Fn ( fn_kind ) ,
2856+ ItemKind :: TyAlias ( ty_alias_kind ) => AssocItemKind :: TyAlias ( ty_alias_kind ) ,
28382857 ItemKind :: MacCall ( a) => AssocItemKind :: MacCall ( a) ,
28392858 _ => return Err ( item_kind) ,
28402859 } )
@@ -2846,10 +2865,10 @@ impl TryFrom<ItemKind> for AssocItemKind {
28462865pub enum ForeignItemKind {
28472866 /// A foreign static item (`static FOO: u8`).
28482867 Static ( P < Ty > , Mutability , Option < P < Expr > > ) ,
2849- /// A foreign function.
2850- Fn ( Defaultness , FnSig , Generics , Option < P < Block > > ) ,
2851- /// A foreign type.
2852- TyAlias ( Defaultness , Generics , GenericBounds , Option < P < Ty > > ) ,
2868+ /// An foreign function.
2869+ Fn ( Box < FnKind > ) ,
2870+ /// An foreign type.
2871+ TyAlias ( Box < TyAliasKind > ) ,
28532872 /// A macro expanding to foreign items.
28542873 MacCall ( MacCall ) ,
28552874}
@@ -2858,8 +2877,8 @@ impl From<ForeignItemKind> for ItemKind {
28582877 fn from ( foreign_item_kind : ForeignItemKind ) -> ItemKind {
28592878 match foreign_item_kind {
28602879 ForeignItemKind :: Static ( a, b, c) => ItemKind :: Static ( a, b, c) ,
2861- ForeignItemKind :: Fn ( a , b , c , d ) => ItemKind :: Fn ( a , b , c , d ) ,
2862- ForeignItemKind :: TyAlias ( a , b , c , d ) => ItemKind :: TyAlias ( a , b , c , d ) ,
2880+ ForeignItemKind :: Fn ( fn_kind ) => ItemKind :: Fn ( fn_kind ) ,
2881+ ForeignItemKind :: TyAlias ( ty_alias_kind ) => ItemKind :: TyAlias ( ty_alias_kind ) ,
28632882 ForeignItemKind :: MacCall ( a) => ItemKind :: MacCall ( a) ,
28642883 }
28652884 }
@@ -2871,8 +2890,8 @@ impl TryFrom<ItemKind> for ForeignItemKind {
28712890 fn try_from ( item_kind : ItemKind ) -> Result < ForeignItemKind , ItemKind > {
28722891 Ok ( match item_kind {
28732892 ItemKind :: Static ( a, b, c) => ForeignItemKind :: Static ( a, b, c) ,
2874- ItemKind :: Fn ( a , b , c , d ) => ForeignItemKind :: Fn ( a , b , c , d ) ,
2875- ItemKind :: TyAlias ( a , b , c , d ) => ForeignItemKind :: TyAlias ( a , b , c , d ) ,
2893+ ItemKind :: Fn ( fn_kind ) => ForeignItemKind :: Fn ( fn_kind ) ,
2894+ ItemKind :: TyAlias ( ty_alias_kind ) => ForeignItemKind :: TyAlias ( ty_alias_kind ) ,
28762895 ItemKind :: MacCall ( a) => ForeignItemKind :: MacCall ( a) ,
28772896 _ => return Err ( item_kind) ,
28782897 } )
0 commit comments