@@ -3137,6 +3137,35 @@ pub struct StaticItem {
31373137 pub expr : Option < P < Expr > > ,
31383138}
31393139
3140+ /// A static item in `extern` block.
3141+ // This struct is identical to StaticItem for now but it's going to have a safety attribute.
3142+ #[ derive( Clone , Encodable , Decodable , Debug ) ]
3143+ pub struct StaticForeignItem {
3144+ pub ty : P < Ty > ,
3145+ pub mutability : Mutability ,
3146+ pub expr : Option < P < Expr > > ,
3147+ }
3148+
3149+ impl From < StaticItem > for StaticForeignItem {
3150+ fn from ( static_item : StaticItem ) -> StaticForeignItem {
3151+ StaticForeignItem {
3152+ ty : static_item. ty ,
3153+ mutability : static_item. mutability ,
3154+ expr : static_item. expr ,
3155+ }
3156+ }
3157+ }
3158+
3159+ impl From < StaticForeignItem > for StaticItem {
3160+ fn from ( static_item : StaticForeignItem ) -> StaticItem {
3161+ StaticItem {
3162+ ty : static_item. ty ,
3163+ mutability : static_item. mutability ,
3164+ expr : static_item. expr ,
3165+ }
3166+ }
3167+ }
3168+
31403169#[ derive( Clone , Encodable , Decodable , Debug ) ]
31413170pub struct ConstItem {
31423171 pub defaultness : Defaultness ,
@@ -3340,7 +3369,7 @@ impl TryFrom<ItemKind> for AssocItemKind {
33403369#[ derive( Clone , Encodable , Decodable , Debug ) ]
33413370pub enum ForeignItemKind {
33423371 /// A foreign static item (`static FOO: u8`).
3343- Static ( P < Ty > , Mutability , Option < P < Expr > > ) ,
3372+ Static ( Box < StaticForeignItem > ) ,
33443373 /// An foreign function.
33453374 Fn ( Box < Fn > ) ,
33463375 /// An foreign type.
@@ -3352,8 +3381,8 @@ pub enum ForeignItemKind {
33523381impl From < ForeignItemKind > for ItemKind {
33533382 fn from ( foreign_item_kind : ForeignItemKind ) -> ItemKind {
33543383 match foreign_item_kind {
3355- ForeignItemKind :: Static ( a , b , c ) => {
3356- ItemKind :: Static ( StaticItem { ty : a , mutability : b , expr : c } . into ( ) )
3384+ ForeignItemKind :: Static ( box static_foreign_item ) => {
3385+ ItemKind :: Static ( Box :: new ( static_foreign_item . into ( ) ) )
33573386 }
33583387 ForeignItemKind :: Fn ( fn_kind) => ItemKind :: Fn ( fn_kind) ,
33593388 ForeignItemKind :: TyAlias ( ty_alias_kind) => ItemKind :: TyAlias ( ty_alias_kind) ,
@@ -3367,8 +3396,8 @@ impl TryFrom<ItemKind> for ForeignItemKind {
33673396
33683397 fn try_from ( item_kind : ItemKind ) -> Result < ForeignItemKind , ItemKind > {
33693398 Ok ( match item_kind {
3370- ItemKind :: Static ( box StaticItem { ty : a , mutability : b , expr : c } ) => {
3371- ForeignItemKind :: Static ( a , b , c )
3399+ ItemKind :: Static ( box static_item ) => {
3400+ ForeignItemKind :: Static ( Box :: new ( static_item . into ( ) ) )
33723401 }
33733402 ItemKind :: Fn ( fn_kind) => ForeignItemKind :: Fn ( fn_kind) ,
33743403 ItemKind :: TyAlias ( ty_alias_kind) => ForeignItemKind :: TyAlias ( ty_alias_kind) ,
@@ -3393,8 +3422,8 @@ mod size_asserts {
33933422 static_assert_size ! ( Expr , 72 ) ;
33943423 static_assert_size ! ( ExprKind , 40 ) ;
33953424 static_assert_size ! ( Fn , 160 ) ;
3396- static_assert_size ! ( ForeignItem , 96 ) ;
3397- static_assert_size ! ( ForeignItemKind , 24 ) ;
3425+ static_assert_size ! ( ForeignItem , 88 ) ;
3426+ static_assert_size ! ( ForeignItemKind , 16 ) ;
33983427 static_assert_size ! ( GenericArg , 24 ) ;
33993428 static_assert_size ! ( GenericBound , 88 ) ;
34003429 static_assert_size ! ( Generics , 40 ) ;
0 commit comments