@@ -3126,6 +3126,35 @@ pub struct StaticItem {
3126
3126
pub expr : Option < P < Expr > > ,
3127
3127
}
3128
3128
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
+
3129
3158
#[ derive( Clone , Encodable , Decodable , Debug ) ]
3130
3159
pub struct ConstItem {
3131
3160
pub defaultness : Defaultness ,
@@ -3329,7 +3358,7 @@ impl TryFrom<ItemKind> for AssocItemKind {
3329
3358
#[ derive( Clone , Encodable , Decodable , Debug ) ]
3330
3359
pub enum ForeignItemKind {
3331
3360
/// A foreign static item (`static FOO: u8`).
3332
- Static ( P < Ty > , Mutability , Option < P < Expr > > ) ,
3361
+ Static ( Box < StaticForeignItem > ) ,
3333
3362
/// An foreign function.
3334
3363
Fn ( Box < Fn > ) ,
3335
3364
/// An foreign type.
@@ -3341,8 +3370,8 @@ pub enum ForeignItemKind {
3341
3370
impl From < ForeignItemKind > for ItemKind {
3342
3371
fn from ( foreign_item_kind : ForeignItemKind ) -> ItemKind {
3343
3372
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 ( ) ) )
3346
3375
}
3347
3376
ForeignItemKind :: Fn ( fn_kind) => ItemKind :: Fn ( fn_kind) ,
3348
3377
ForeignItemKind :: TyAlias ( ty_alias_kind) => ItemKind :: TyAlias ( ty_alias_kind) ,
@@ -3356,8 +3385,8 @@ impl TryFrom<ItemKind> for ForeignItemKind {
3356
3385
3357
3386
fn try_from ( item_kind : ItemKind ) -> Result < ForeignItemKind , ItemKind > {
3358
3387
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 ( ) ) )
3361
3390
}
3362
3391
ItemKind :: Fn ( fn_kind) => ForeignItemKind :: Fn ( fn_kind) ,
3363
3392
ItemKind :: TyAlias ( ty_alias_kind) => ForeignItemKind :: TyAlias ( ty_alias_kind) ,
@@ -3382,8 +3411,8 @@ mod size_asserts {
3382
3411
static_assert_size ! ( Expr , 72 ) ;
3383
3412
static_assert_size ! ( ExprKind , 40 ) ;
3384
3413
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 ) ;
3387
3416
static_assert_size ! ( GenericArg , 24 ) ;
3388
3417
static_assert_size ! ( GenericBound , 88 ) ;
3389
3418
static_assert_size ! ( Generics , 40 ) ;
0 commit comments