@@ -24,12 +24,12 @@ macro_rules! impl_nonzero_fmt {
24
24
25
25
macro_rules! nonzero_integer {
26
26
(
27
+ #[ $stability: meta]
28
+ #[ $const_new_unchecked_stability: meta]
27
29
Self = $Ty: ident,
28
30
Primitive = $signedness: ident $Int: ident,
29
31
$( UnsignedNonZero = $UnsignedNonZero: ident, ) ?
30
32
UnsignedPrimitive = $UnsignedPrimitive: ty,
31
- feature = $feature: literal,
32
- original_stabilization = $since: literal,
33
33
34
34
// Used in doc comments.
35
35
leading_zeros_test = $leading_zeros_test: expr,
@@ -64,7 +64,7 @@ macro_rules! nonzero_integer {
64
64
/// ```
65
65
///
66
66
/// [null pointer optimization]: crate::option#representation
67
- #[ stable ( feature = $feature , since = $since ) ]
67
+ #[ $stability ]
68
68
#[ derive( Copy , Clone , Eq , PartialEq , Ord , PartialOrd , Hash ) ]
69
69
#[ repr( transparent) ]
70
70
#[ rustc_layout_scalar_valid_range_start( 1 ) ]
@@ -79,8 +79,8 @@ macro_rules! nonzero_integer {
79
79
/// # Safety
80
80
///
81
81
/// The value must not be zero.
82
- #[ stable ( feature = $feature , since = $since ) ]
83
- #[ rustc_const_stable ( feature = $feature , since = $since ) ]
82
+ #[ $stability ]
83
+ #[ $const_new_unchecked_stability ]
84
84
#[ must_use]
85
85
#[ inline]
86
86
pub const unsafe fn new_unchecked( n: $Int) -> Self {
@@ -95,7 +95,7 @@ macro_rules! nonzero_integer {
95
95
}
96
96
97
97
/// Creates a non-zero if the given value is not zero.
98
- #[ stable ( feature = $feature , since = $since ) ]
98
+ #[ $stability ]
99
99
#[ rustc_const_stable( feature = "const_nonzero_int_methods" , since = "1.47.0" ) ]
100
100
#[ must_use]
101
101
#[ inline]
@@ -109,7 +109,7 @@ macro_rules! nonzero_integer {
109
109
}
110
110
111
111
/// Returns the value as a primitive type.
112
- #[ stable ( feature = $feature , since = $since ) ]
112
+ #[ $stability ]
113
113
#[ inline]
114
114
#[ rustc_const_stable( feature = "const_nonzero_get" , since = "1.34.0" ) ]
115
115
pub const fn get( self ) -> $Int {
@@ -139,7 +139,7 @@ macro_rules! nonzero_integer {
139
139
/// Basic usage:
140
140
///
141
141
/// ```
142
- #[ doc = concat!( "let n = std::num::" , stringify!( $Ty) , "::new(" , stringify! ( $leading_zeros_test) , ").unwrap();" ) ]
142
+ #[ doc = concat!( "let n = std::num::" , stringify!( $Ty) , "::new(" , $leading_zeros_test, ").unwrap();" ) ]
143
143
///
144
144
/// assert_eq!(n.leading_zeros(), 0);
145
145
/// ```
@@ -447,8 +447,7 @@ macro_rules! nonzero_integer {
447
447
}
448
448
449
449
impl_nonzero_fmt! {
450
- #[ stable( feature = $feature, since = $since) ]
451
- ( Debug , Display , Binary , Octal , LowerHex , UpperHex ) for $Ty
450
+ #[ $stability] ( Debug , Display , Binary , Octal , LowerHex , UpperHex ) for $Ty
452
451
}
453
452
454
453
#[ stable( feature = "nonzero_parse" , since = "1.35.0" ) ]
@@ -464,6 +463,28 @@ macro_rules! nonzero_integer {
464
463
465
464
nonzero_integer_signedness_dependent_impls!( $Ty $signedness $Int) ;
466
465
} ;
466
+
467
+ ( Self = $Ty: ident, Primitive = unsigned $Int: ident $( , ) ?) => {
468
+ nonzero_integer! {
469
+ #[ stable( feature = "nonzero" , since = "1.28.0" ) ]
470
+ #[ rustc_const_stable( feature = "nonzero" , since = "1.28.0" ) ]
471
+ Self = $Ty,
472
+ Primitive = unsigned $Int,
473
+ UnsignedPrimitive = $Int,
474
+ leading_zeros_test = concat!( stringify!( $Int) , "::MAX" ) ,
475
+ }
476
+ } ;
477
+
478
+ ( Self = $Ty: ident, Primitive = signed $Int: ident, $( $rest: tt) * ) => {
479
+ nonzero_integer! {
480
+ #[ stable( feature = "signed_nonzero" , since = "1.34.0" ) ]
481
+ #[ rustc_const_stable( feature = "signed_nonzero" , since = "1.34.0" ) ]
482
+ Self = $Ty,
483
+ Primitive = signed $Int,
484
+ $( $rest) *
485
+ leading_zeros_test = concat!( "-1" , stringify!( $Int) ) ,
486
+ }
487
+ } ;
467
488
}
468
489
469
490
macro_rules! nonzero_integer_signedness_dependent_impls {
@@ -1239,113 +1260,71 @@ macro_rules! sign_dependent_expr {
1239
1260
nonzero_integer ! {
1240
1261
Self = NonZeroU8 ,
1241
1262
Primitive = unsigned u8 ,
1242
- UnsignedPrimitive = u8 ,
1243
- feature = "nonzero" ,
1244
- original_stabilization = "1.28.0" ,
1245
- leading_zeros_test = u8 :: MAX ,
1246
1263
}
1247
1264
1248
1265
nonzero_integer ! {
1249
1266
Self = NonZeroU16 ,
1250
1267
Primitive = unsigned u16 ,
1251
- UnsignedPrimitive = u16 ,
1252
- feature = "nonzero" ,
1253
- original_stabilization = "1.28.0" ,
1254
- leading_zeros_test = u16 :: MAX ,
1255
1268
}
1256
1269
1257
1270
nonzero_integer ! {
1258
1271
Self = NonZeroU32 ,
1259
1272
Primitive = unsigned u32 ,
1260
- UnsignedPrimitive = u32 ,
1261
- feature = "nonzero" ,
1262
- original_stabilization = "1.28.0" ,
1263
- leading_zeros_test = u32 :: MAX ,
1264
1273
}
1265
1274
1266
1275
nonzero_integer ! {
1267
1276
Self = NonZeroU64 ,
1268
1277
Primitive = unsigned u64 ,
1269
- UnsignedPrimitive = u64 ,
1270
- feature = "nonzero" ,
1271
- original_stabilization = "1.28.0" ,
1272
- leading_zeros_test = u64 :: MAX ,
1273
1278
}
1274
1279
1275
1280
nonzero_integer ! {
1276
1281
Self = NonZeroU128 ,
1277
1282
Primitive = unsigned u128 ,
1278
- UnsignedPrimitive = u128 ,
1279
- feature = "nonzero" ,
1280
- original_stabilization = "1.28.0" ,
1281
- leading_zeros_test = u128 :: MAX ,
1282
1283
}
1283
1284
1284
1285
nonzero_integer ! {
1285
1286
Self = NonZeroUsize ,
1286
1287
Primitive = unsigned usize ,
1287
- UnsignedPrimitive = usize ,
1288
- feature = "nonzero" ,
1289
- original_stabilization = "1.28.0" ,
1290
- leading_zeros_test = usize :: MAX ,
1291
1288
}
1292
1289
1293
1290
nonzero_integer ! {
1294
1291
Self = NonZeroI8 ,
1295
1292
Primitive = signed i8 ,
1296
1293
UnsignedNonZero = NonZeroU8 ,
1297
1294
UnsignedPrimitive = u8 ,
1298
- feature = "signed_nonzero" ,
1299
- original_stabilization = "1.34.0" ,
1300
- leading_zeros_test = -1i8 ,
1301
1295
}
1302
1296
1303
1297
nonzero_integer ! {
1304
1298
Self = NonZeroI16 ,
1305
1299
Primitive = signed i16 ,
1306
1300
UnsignedNonZero = NonZeroU16 ,
1307
1301
UnsignedPrimitive = u16 ,
1308
- feature = "signed_nonzero" ,
1309
- original_stabilization = "1.34.0" ,
1310
- leading_zeros_test = -1i16 ,
1311
1302
}
1312
1303
1313
1304
nonzero_integer ! {
1314
1305
Self = NonZeroI32 ,
1315
1306
Primitive = signed i32 ,
1316
1307
UnsignedNonZero = NonZeroU32 ,
1317
1308
UnsignedPrimitive = u32 ,
1318
- feature = "signed_nonzero" ,
1319
- original_stabilization = "1.34.0" ,
1320
- leading_zeros_test = -1i32 ,
1321
1309
}
1322
1310
1323
1311
nonzero_integer ! {
1324
1312
Self = NonZeroI64 ,
1325
1313
Primitive = signed i64 ,
1326
1314
UnsignedNonZero = NonZeroU64 ,
1327
1315
UnsignedPrimitive = u64 ,
1328
- feature = "signed_nonzero" ,
1329
- original_stabilization = "1.34.0" ,
1330
- leading_zeros_test = -1i64 ,
1331
1316
}
1332
1317
1333
1318
nonzero_integer ! {
1334
1319
Self = NonZeroI128 ,
1335
1320
Primitive = signed i128 ,
1336
1321
UnsignedNonZero = NonZeroU128 ,
1337
1322
UnsignedPrimitive = u128 ,
1338
- feature = "signed_nonzero" ,
1339
- original_stabilization = "1.34.0" ,
1340
- leading_zeros_test = -1i128 ,
1341
1323
}
1342
1324
1343
1325
nonzero_integer ! {
1344
1326
Self = NonZeroIsize ,
1345
1327
Primitive = signed isize ,
1346
1328
UnsignedNonZero = NonZeroUsize ,
1347
1329
UnsignedPrimitive = usize ,
1348
- feature = "signed_nonzero" ,
1349
- original_stabilization = "1.34.0" ,
1350
- leading_zeros_test = -1isize ,
1351
1330
}
0 commit comments