@@ -3123,6 +3123,35 @@ pub struct StaticItem {
3123
3123
pub expr : Option < P < Expr > > ,
3124
3124
}
3125
3125
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
+
3126
3155
#[ derive( Clone , Encodable , Decodable , Debug ) ]
3127
3156
pub struct ConstItem {
3128
3157
pub defaultness : Defaultness ,
@@ -3326,7 +3355,7 @@ impl TryFrom<ItemKind> for AssocItemKind {
3326
3355
#[ derive( Clone , Encodable , Decodable , Debug ) ]
3327
3356
pub enum ForeignItemKind {
3328
3357
/// A foreign static item (`static FOO: u8`).
3329
- Static ( P < Ty > , Mutability , Option < P < Expr > > ) ,
3358
+ Static ( Box < StaticForeignItem > ) ,
3330
3359
/// An foreign function.
3331
3360
Fn ( Box < Fn > ) ,
3332
3361
/// An foreign type.
@@ -3338,8 +3367,8 @@ pub enum ForeignItemKind {
3338
3367
impl From < ForeignItemKind > for ItemKind {
3339
3368
fn from ( foreign_item_kind : ForeignItemKind ) -> ItemKind {
3340
3369
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 ( ) ) )
3343
3372
}
3344
3373
ForeignItemKind :: Fn ( fn_kind) => ItemKind :: Fn ( fn_kind) ,
3345
3374
ForeignItemKind :: TyAlias ( ty_alias_kind) => ItemKind :: TyAlias ( ty_alias_kind) ,
@@ -3353,8 +3382,8 @@ impl TryFrom<ItemKind> for ForeignItemKind {
3353
3382
3354
3383
fn try_from ( item_kind : ItemKind ) -> Result < ForeignItemKind , ItemKind > {
3355
3384
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 ( ) ) )
3358
3387
}
3359
3388
ItemKind :: Fn ( fn_kind) => ForeignItemKind :: Fn ( fn_kind) ,
3360
3389
ItemKind :: TyAlias ( ty_alias_kind) => ForeignItemKind :: TyAlias ( ty_alias_kind) ,
@@ -3379,8 +3408,8 @@ mod size_asserts {
3379
3408
static_assert_size ! ( Expr , 72 ) ;
3380
3409
static_assert_size ! ( ExprKind , 40 ) ;
3381
3410
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 ) ;
3384
3413
static_assert_size ! ( GenericArg , 24 ) ;
3385
3414
static_assert_size ! ( GenericBound , 88 ) ;
3386
3415
static_assert_size ! ( Generics , 40 ) ;
0 commit comments