@@ -3123,6 +3123,35 @@ pub struct StaticItem {
31233123 pub expr : Option < P < Expr > > ,
31243124}
31253125
3126+ /// A static item in `extern` block.
3127+ // This struct is identical to StaticItem for now but it's going to have a safety attribute.
3128+ #[ derive( Clone , Encodable , Decodable , Debug ) ]
3129+ pub struct StaticForeignItem {
3130+ pub ty : P < Ty > ,
3131+ pub mutability : Mutability ,
3132+ pub expr : Option < P < Expr > > ,
3133+ }
3134+
3135+ impl From < StaticItem > for StaticForeignItem {
3136+ fn from ( static_item : StaticItem ) -> StaticForeignItem {
3137+ StaticForeignItem {
3138+ ty : static_item. ty ,
3139+ mutability : static_item. mutability ,
3140+ expr : static_item. expr ,
3141+ }
3142+ }
3143+ }
3144+
3145+ impl From < StaticForeignItem > for StaticItem {
3146+ fn from ( static_item : StaticForeignItem ) -> StaticItem {
3147+ StaticItem {
3148+ ty : static_item. ty ,
3149+ mutability : static_item. mutability ,
3150+ expr : static_item. expr ,
3151+ }
3152+ }
3153+ }
3154+
31263155#[ derive( Clone , Encodable , Decodable , Debug ) ]
31273156pub struct ConstItem {
31283157 pub defaultness : Defaultness ,
@@ -3326,7 +3355,7 @@ impl TryFrom<ItemKind> for AssocItemKind {
33263355#[ derive( Clone , Encodable , Decodable , Debug ) ]
33273356pub enum ForeignItemKind {
33283357 /// A foreign static item (`static FOO: u8`).
3329- Static ( P < Ty > , Mutability , Option < P < Expr > > ) ,
3358+ Static ( Box < StaticForeignItem > ) ,
33303359 /// An foreign function.
33313360 Fn ( Box < Fn > ) ,
33323361 /// An foreign type.
@@ -3338,8 +3367,8 @@ pub enum ForeignItemKind {
33383367impl From < ForeignItemKind > for ItemKind {
33393368 fn from ( foreign_item_kind : ForeignItemKind ) -> ItemKind {
33403369 match foreign_item_kind {
3341- ForeignItemKind :: Static ( a , b , c ) => {
3342- ItemKind :: Static ( StaticItem { ty : a , mutability : b , expr : c } . into ( ) )
3370+ ForeignItemKind :: Static ( box static_foreign_item ) => {
3371+ ItemKind :: Static ( Box :: new ( static_foreign_item . into ( ) ) )
33433372 }
33443373 ForeignItemKind :: Fn ( fn_kind) => ItemKind :: Fn ( fn_kind) ,
33453374 ForeignItemKind :: TyAlias ( ty_alias_kind) => ItemKind :: TyAlias ( ty_alias_kind) ,
@@ -3353,8 +3382,8 @@ impl TryFrom<ItemKind> for ForeignItemKind {
33533382
33543383 fn try_from ( item_kind : ItemKind ) -> Result < ForeignItemKind , ItemKind > {
33553384 Ok ( match item_kind {
3356- ItemKind :: Static ( box StaticItem { ty : a , mutability : b , expr : c } ) => {
3357- ForeignItemKind :: Static ( a , b , c )
3385+ ItemKind :: Static ( box static_item ) => {
3386+ ForeignItemKind :: Static ( Box :: new ( static_item . into ( ) ) )
33583387 }
33593388 ItemKind :: Fn ( fn_kind) => ForeignItemKind :: Fn ( fn_kind) ,
33603389 ItemKind :: TyAlias ( ty_alias_kind) => ForeignItemKind :: TyAlias ( ty_alias_kind) ,
@@ -3379,8 +3408,8 @@ mod size_asserts {
33793408 static_assert_size ! ( Expr , 72 ) ;
33803409 static_assert_size ! ( ExprKind , 40 ) ;
33813410 static_assert_size ! ( Fn , 160 ) ;
3382- static_assert_size ! ( ForeignItem , 96 ) ;
3383- static_assert_size ! ( ForeignItemKind , 24 ) ;
3411+ static_assert_size ! ( ForeignItem , 88 ) ;
3412+ static_assert_size ! ( ForeignItemKind , 16 ) ;
33843413 static_assert_size ! ( GenericArg , 24 ) ;
33853414 static_assert_size ! ( GenericBound , 88 ) ;
33863415 static_assert_size ! ( Generics , 40 ) ;
0 commit comments