@@ -3126,6 +3126,35 @@ pub struct StaticItem {
31263126 pub expr : Option < P < Expr > > ,
31273127}
31283128
3129+ /// A static item in `extern` block.
3130+ // This struct is identical to StaticItem for now but it's going to have a safety attribute.
3131+ #[ derive( Clone , Encodable , Decodable , Debug ) ]
3132+ pub struct StaticForeignItem {
3133+ pub ty : P < Ty > ,
3134+ pub mutability : Mutability ,
3135+ pub expr : Option < P < Expr > > ,
3136+ }
3137+
3138+ impl From < StaticItem > for StaticForeignItem {
3139+ fn from ( static_item : StaticItem ) -> StaticForeignItem {
3140+ StaticForeignItem {
3141+ ty : static_item. ty ,
3142+ mutability : static_item. mutability ,
3143+ expr : static_item. expr ,
3144+ }
3145+ }
3146+ }
3147+
3148+ impl From < StaticForeignItem > for StaticItem {
3149+ fn from ( static_item : StaticForeignItem ) -> StaticItem {
3150+ StaticItem {
3151+ ty : static_item. ty ,
3152+ mutability : static_item. mutability ,
3153+ expr : static_item. expr ,
3154+ }
3155+ }
3156+ }
3157+
31293158#[ derive( Clone , Encodable , Decodable , Debug ) ]
31303159pub struct ConstItem {
31313160 pub defaultness : Defaultness ,
@@ -3329,7 +3358,7 @@ impl TryFrom<ItemKind> for AssocItemKind {
33293358#[ derive( Clone , Encodable , Decodable , Debug ) ]
33303359pub enum ForeignItemKind {
33313360 /// A foreign static item (`static FOO: u8`).
3332- Static ( P < Ty > , Mutability , Option < P < Expr > > ) ,
3361+ Static ( Box < StaticForeignItem > ) ,
33333362 /// An foreign function.
33343363 Fn ( Box < Fn > ) ,
33353364 /// An foreign type.
@@ -3341,8 +3370,8 @@ pub enum ForeignItemKind {
33413370impl From < ForeignItemKind > for ItemKind {
33423371 fn from ( foreign_item_kind : ForeignItemKind ) -> ItemKind {
33433372 match foreign_item_kind {
3344- ForeignItemKind :: Static ( a , b , c ) => {
3345- ItemKind :: Static ( StaticItem { ty : a , mutability : b , expr : c } . into ( ) )
3373+ ForeignItemKind :: Static ( box static_foreign_item ) => {
3374+ ItemKind :: Static ( Box :: new ( static_foreign_item . into ( ) ) )
33463375 }
33473376 ForeignItemKind :: Fn ( fn_kind) => ItemKind :: Fn ( fn_kind) ,
33483377 ForeignItemKind :: TyAlias ( ty_alias_kind) => ItemKind :: TyAlias ( ty_alias_kind) ,
@@ -3356,8 +3385,8 @@ impl TryFrom<ItemKind> for ForeignItemKind {
33563385
33573386 fn try_from ( item_kind : ItemKind ) -> Result < ForeignItemKind , ItemKind > {
33583387 Ok ( match item_kind {
3359- ItemKind :: Static ( box StaticItem { ty : a , mutability : b , expr : c } ) => {
3360- ForeignItemKind :: Static ( a , b , c )
3388+ ItemKind :: Static ( box static_item ) => {
3389+ ForeignItemKind :: Static ( Box :: new ( static_item . into ( ) ) )
33613390 }
33623391 ItemKind :: Fn ( fn_kind) => ForeignItemKind :: Fn ( fn_kind) ,
33633392 ItemKind :: TyAlias ( ty_alias_kind) => ForeignItemKind :: TyAlias ( ty_alias_kind) ,
@@ -3382,8 +3411,8 @@ mod size_asserts {
33823411 static_assert_size ! ( Expr , 72 ) ;
33833412 static_assert_size ! ( ExprKind , 40 ) ;
33843413 static_assert_size ! ( Fn , 160 ) ;
3385- static_assert_size ! ( ForeignItem , 96 ) ;
3386- static_assert_size ! ( ForeignItemKind , 24 ) ;
3414+ static_assert_size ! ( ForeignItem , 88 ) ;
3415+ static_assert_size ! ( ForeignItemKind , 16 ) ;
33873416 static_assert_size ! ( GenericArg , 24 ) ;
33883417 static_assert_size ! ( GenericBound , 88 ) ;
33893418 static_assert_size ! ( Generics , 40 ) ;
0 commit comments