@@ -2655,6 +2655,36 @@ 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+
2667+ #[ derive( Clone , Encodable , Decodable , Debug ) ]
2668+ pub struct TyAliasKind ( pub Defaultness , pub Generics , pub GenericBounds , pub Option < P < Ty > > ) ;
2669+
2670+ #[ derive( Clone , Encodable , Decodable , Debug ) ]
2671+ pub struct ImplKind {
2672+ pub unsafety : Unsafe ,
2673+ pub polarity : ImplPolarity ,
2674+ pub defaultness : Defaultness ,
2675+ pub constness : Const ,
2676+ pub generics : Generics ,
2677+
2678+ /// The trait being implemented, if any.
2679+ pub of_trait : Option < TraitRef > ,
2680+
2681+ pub self_ty : P < Ty > ,
2682+ pub items : Vec < P < AssocItem > > ,
2683+ }
2684+
2685+ #[ derive( Clone , Encodable , Decodable , Debug ) ]
2686+ pub struct FnKind ( pub Defaultness , pub FnSig , pub Generics , pub Option < P < Block > > ) ;
2687+
26582688#[ derive( Clone , Encodable , Decodable , Debug ) ]
26592689pub enum ItemKind {
26602690 /// An `extern crate` item, with the optional *original* crate name if the crate was renamed.
@@ -2676,7 +2706,7 @@ pub enum ItemKind {
26762706 /// A function declaration (`fn`).
26772707 ///
26782708 /// E.g., `fn foo(bar: usize) -> usize { .. }`.
2679- Fn ( Defaultness , FnSig , Generics , Option < P < Block > > ) ,
2709+ Fn ( Box < FnKind > ) ,
26802710 /// A module declaration (`mod`).
26812711 ///
26822712 /// E.g., `mod foo;` or `mod foo { .. }`.
@@ -2690,7 +2720,7 @@ pub enum ItemKind {
26902720 /// A type alias (`type`).
26912721 ///
26922722 /// E.g., `type Foo = Bar<u8>;`.
2693- TyAlias ( Defaultness , Generics , GenericBounds , Option < P < Ty > > ) ,
2723+ TyAlias ( Box < TyAliasKind > ) ,
26942724 /// An enum definition (`enum`).
26952725 ///
26962726 /// E.g., `enum Foo<A, B> { C<A>, D<B> }`.
@@ -2706,27 +2736,15 @@ pub enum ItemKind {
27062736 /// A trait declaration (`trait`).
27072737 ///
27082738 /// E.g., `trait Foo { .. }`, `trait Foo<T> { .. }` or `auto trait Foo {}`.
2709- Trait ( IsAuto , Unsafe , Generics , GenericBounds , Vec < P < AssocItem > > ) ,
2739+ Trait ( Box < TraitKind > ) ,
27102740 /// Trait alias
27112741 ///
27122742 /// E.g., `trait Foo = Bar + Quux;`.
27132743 TraitAlias ( Generics , GenericBounds ) ,
27142744 /// An implementation.
27152745 ///
27162746 /// 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- } ,
2747+ Impl ( Box < ImplKind > ) ,
27302748 /// A macro invocation.
27312749 ///
27322750 /// E.g., `foo!(..)`.
@@ -2736,6 +2754,9 @@ pub enum ItemKind {
27362754 MacroDef ( MacroDef ) ,
27372755}
27382756
2757+ #[ cfg( target_arch = "x86_64" ) ]
2758+ rustc_data_structures:: static_assert_size!( ItemKind , 112 ) ;
2759+
27392760impl ItemKind {
27402761 pub fn article ( & self ) -> & str {
27412762 use ItemKind :: * ;
@@ -2770,14 +2791,14 @@ impl ItemKind {
27702791
27712792 pub fn generics ( & self ) -> Option < & Generics > {
27722793 match self {
2773- Self :: Fn ( _, _, generics, _)
2774- | Self :: TyAlias ( _, generics, ..)
2794+ Self :: Fn ( box FnKind ( _, _, generics, _) )
2795+ | Self :: TyAlias ( box TyAliasKind ( _, generics, ..) )
27752796 | Self :: Enum ( _, generics)
27762797 | Self :: Struct ( _, generics)
27772798 | Self :: Union ( _, generics)
2778- | Self :: Trait ( _, _, generics, ..)
2799+ | Self :: Trait ( box TraitKind ( _, _, generics, ..) )
27792800 | Self :: TraitAlias ( generics, _)
2780- | Self :: Impl { generics, .. } => Some ( generics) ,
2801+ | Self :: Impl ( box ImplKind { generics, .. } ) => Some ( generics) ,
27812802 _ => None ,
27822803 }
27832804 }
@@ -2800,17 +2821,22 @@ pub enum AssocItemKind {
28002821 /// If `def` is parsed, then the constant is provided, and otherwise required.
28012822 Const ( Defaultness , P < Ty > , Option < P < Expr > > ) ,
28022823 /// An associated function.
2803- Fn ( Defaultness , FnSig , Generics , Option < P < Block > > ) ,
2824+ Fn ( Box < FnKind > ) ,
28042825 /// An associated type.
2805- TyAlias ( Defaultness , Generics , GenericBounds , Option < P < Ty > > ) ,
2826+ TyAlias ( Box < TyAliasKind > ) ,
28062827 /// A macro expanding to associated items.
28072828 MacCall ( MacCall ) ,
28082829}
28092830
2831+ #[ cfg( target_arch = "x86_64" ) ]
2832+ rustc_data_structures:: static_assert_size!( AssocItemKind , 72 ) ;
2833+
28102834impl AssocItemKind {
28112835 pub fn defaultness ( & self ) -> Defaultness {
28122836 match * self {
2813- Self :: Const ( def, ..) | Self :: Fn ( def, ..) | Self :: TyAlias ( def, ..) => def,
2837+ Self :: Const ( def, ..)
2838+ | Self :: Fn ( box FnKind ( def, ..) )
2839+ | Self :: TyAlias ( box TyAliasKind ( def, ..) ) => def,
28142840 Self :: MacCall ( ..) => Defaultness :: Final ,
28152841 }
28162842 }
@@ -2820,8 +2846,8 @@ impl From<AssocItemKind> for ItemKind {
28202846 fn from ( assoc_item_kind : AssocItemKind ) -> ItemKind {
28212847 match assoc_item_kind {
28222848 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 ) ,
2849+ AssocItemKind :: Fn ( fn_kind ) => ItemKind :: Fn ( fn_kind ) ,
2850+ AssocItemKind :: TyAlias ( ty_alias_kind ) => ItemKind :: TyAlias ( ty_alias_kind ) ,
28252851 AssocItemKind :: MacCall ( a) => ItemKind :: MacCall ( a) ,
28262852 }
28272853 }
@@ -2833,8 +2859,8 @@ impl TryFrom<ItemKind> for AssocItemKind {
28332859 fn try_from ( item_kind : ItemKind ) -> Result < AssocItemKind , ItemKind > {
28342860 Ok ( match item_kind {
28352861 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 ) ,
2862+ ItemKind :: Fn ( fn_kind ) => AssocItemKind :: Fn ( fn_kind ) ,
2863+ ItemKind :: TyAlias ( ty_alias_kind ) => AssocItemKind :: TyAlias ( ty_alias_kind ) ,
28382864 ItemKind :: MacCall ( a) => AssocItemKind :: MacCall ( a) ,
28392865 _ => return Err ( item_kind) ,
28402866 } )
@@ -2846,20 +2872,23 @@ impl TryFrom<ItemKind> for AssocItemKind {
28462872pub enum ForeignItemKind {
28472873 /// A foreign static item (`static FOO: u8`).
28482874 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 > > ) ,
2875+ /// An foreign function.
2876+ Fn ( Box < FnKind > ) ,
2877+ /// An foreign type.
2878+ TyAlias ( Box < TyAliasKind > ) ,
28532879 /// A macro expanding to foreign items.
28542880 MacCall ( MacCall ) ,
28552881}
28562882
2883+ #[ cfg( target_arch = "x86_64" ) ]
2884+ rustc_data_structures:: static_assert_size!( ForeignItemKind , 72 ) ;
2885+
28572886impl From < ForeignItemKind > for ItemKind {
28582887 fn from ( foreign_item_kind : ForeignItemKind ) -> ItemKind {
28592888 match foreign_item_kind {
28602889 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 ) ,
2890+ ForeignItemKind :: Fn ( fn_kind ) => ItemKind :: Fn ( fn_kind ) ,
2891+ ForeignItemKind :: TyAlias ( ty_alias_kind ) => ItemKind :: TyAlias ( ty_alias_kind ) ,
28632892 ForeignItemKind :: MacCall ( a) => ItemKind :: MacCall ( a) ,
28642893 }
28652894 }
@@ -2871,8 +2900,8 @@ impl TryFrom<ItemKind> for ForeignItemKind {
28712900 fn try_from ( item_kind : ItemKind ) -> Result < ForeignItemKind , ItemKind > {
28722901 Ok ( match item_kind {
28732902 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 ) ,
2903+ ItemKind :: Fn ( fn_kind ) => ForeignItemKind :: Fn ( fn_kind ) ,
2904+ ItemKind :: TyAlias ( ty_alias_kind ) => ForeignItemKind :: TyAlias ( ty_alias_kind ) ,
28762905 ItemKind :: MacCall ( a) => ForeignItemKind :: MacCall ( a) ,
28772906 _ => return Err ( item_kind) ,
28782907 } )
0 commit comments