@@ -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 {
@@ -151,7 +151,7 @@ macro_rules! nonzero_integer {
151
151
/// Basic usage:
152
152
///
153
153
/// ```
154
- #[ doc = concat!( "let n = std::num::" , stringify!( $Ty) , "::new(" , stringify! ( $leading_zeros_test) , ").unwrap();" ) ]
154
+ #[ doc = concat!( "let n = std::num::" , stringify!( $Ty) , "::new(" , $leading_zeros_test, ").unwrap();" ) ]
155
155
///
156
156
/// assert_eq!(n.leading_zeros(), 0);
157
157
/// ```
@@ -461,8 +461,7 @@ macro_rules! nonzero_integer {
461
461
}
462
462
463
463
impl_nonzero_fmt! {
464
- #[ stable( feature = $feature, since = $since) ]
465
- ( Debug , Display , Binary , Octal , LowerHex , UpperHex ) for $Ty
464
+ #[ $stability] ( Debug , Display , Binary , Octal , LowerHex , UpperHex ) for $Ty
466
465
}
467
466
468
467
#[ stable( feature = "nonzero_parse" , since = "1.35.0" ) ]
@@ -478,6 +477,28 @@ macro_rules! nonzero_integer {
478
477
479
478
nonzero_integer_signedness_dependent_impls!( $Ty $signedness $Int) ;
480
479
} ;
480
+
481
+ ( Self = $Ty: ident, Primitive = unsigned $Int: ident $( , ) ?) => {
482
+ nonzero_integer! {
483
+ #[ stable( feature = "nonzero" , since = "1.28.0" ) ]
484
+ #[ rustc_const_stable( feature = "nonzero" , since = "1.28.0" ) ]
485
+ Self = $Ty,
486
+ Primitive = unsigned $Int,
487
+ UnsignedPrimitive = $Int,
488
+ leading_zeros_test = concat!( stringify!( $Int) , "::MAX" ) ,
489
+ }
490
+ } ;
491
+
492
+ ( Self = $Ty: ident, Primitive = signed $Int: ident, $( $rest: tt) * ) => {
493
+ nonzero_integer! {
494
+ #[ stable( feature = "signed_nonzero" , since = "1.34.0" ) ]
495
+ #[ rustc_const_stable( feature = "signed_nonzero" , since = "1.34.0" ) ]
496
+ Self = $Ty,
497
+ Primitive = signed $Int,
498
+ $( $rest) *
499
+ leading_zeros_test = concat!( "-1" , stringify!( $Int) ) ,
500
+ }
501
+ } ;
481
502
}
482
503
483
504
macro_rules! nonzero_integer_signedness_dependent_impls {
@@ -1253,113 +1274,71 @@ macro_rules! sign_dependent_expr {
1253
1274
nonzero_integer ! {
1254
1275
Self = NonZeroU8 ,
1255
1276
Primitive = unsigned u8 ,
1256
- UnsignedPrimitive = u8 ,
1257
- feature = "nonzero" ,
1258
- original_stabilization = "1.28.0" ,
1259
- leading_zeros_test = u8 :: MAX ,
1260
1277
}
1261
1278
1262
1279
nonzero_integer ! {
1263
1280
Self = NonZeroU16 ,
1264
1281
Primitive = unsigned u16 ,
1265
- UnsignedPrimitive = u16 ,
1266
- feature = "nonzero" ,
1267
- original_stabilization = "1.28.0" ,
1268
- leading_zeros_test = u16 :: MAX ,
1269
1282
}
1270
1283
1271
1284
nonzero_integer ! {
1272
1285
Self = NonZeroU32 ,
1273
1286
Primitive = unsigned u32 ,
1274
- UnsignedPrimitive = u32 ,
1275
- feature = "nonzero" ,
1276
- original_stabilization = "1.28.0" ,
1277
- leading_zeros_test = u32 :: MAX ,
1278
1287
}
1279
1288
1280
1289
nonzero_integer ! {
1281
1290
Self = NonZeroU64 ,
1282
1291
Primitive = unsigned u64 ,
1283
- UnsignedPrimitive = u64 ,
1284
- feature = "nonzero" ,
1285
- original_stabilization = "1.28.0" ,
1286
- leading_zeros_test = u64 :: MAX ,
1287
1292
}
1288
1293
1289
1294
nonzero_integer ! {
1290
1295
Self = NonZeroU128 ,
1291
1296
Primitive = unsigned u128 ,
1292
- UnsignedPrimitive = u128 ,
1293
- feature = "nonzero" ,
1294
- original_stabilization = "1.28.0" ,
1295
- leading_zeros_test = u128 :: MAX ,
1296
1297
}
1297
1298
1298
1299
nonzero_integer ! {
1299
1300
Self = NonZeroUsize ,
1300
1301
Primitive = unsigned usize ,
1301
- UnsignedPrimitive = usize ,
1302
- feature = "nonzero" ,
1303
- original_stabilization = "1.28.0" ,
1304
- leading_zeros_test = usize :: MAX ,
1305
1302
}
1306
1303
1307
1304
nonzero_integer ! {
1308
1305
Self = NonZeroI8 ,
1309
1306
Primitive = signed i8 ,
1310
1307
UnsignedNonZero = NonZeroU8 ,
1311
1308
UnsignedPrimitive = u8 ,
1312
- feature = "signed_nonzero" ,
1313
- original_stabilization = "1.34.0" ,
1314
- leading_zeros_test = -1i8 ,
1315
1309
}
1316
1310
1317
1311
nonzero_integer ! {
1318
1312
Self = NonZeroI16 ,
1319
1313
Primitive = signed i16 ,
1320
1314
UnsignedNonZero = NonZeroU16 ,
1321
1315
UnsignedPrimitive = u16 ,
1322
- feature = "signed_nonzero" ,
1323
- original_stabilization = "1.34.0" ,
1324
- leading_zeros_test = -1i16 ,
1325
1316
}
1326
1317
1327
1318
nonzero_integer ! {
1328
1319
Self = NonZeroI32 ,
1329
1320
Primitive = signed i32 ,
1330
1321
UnsignedNonZero = NonZeroU32 ,
1331
1322
UnsignedPrimitive = u32 ,
1332
- feature = "signed_nonzero" ,
1333
- original_stabilization = "1.34.0" ,
1334
- leading_zeros_test = -1i32 ,
1335
1323
}
1336
1324
1337
1325
nonzero_integer ! {
1338
1326
Self = NonZeroI64 ,
1339
1327
Primitive = signed i64 ,
1340
1328
UnsignedNonZero = NonZeroU64 ,
1341
1329
UnsignedPrimitive = u64 ,
1342
- feature = "signed_nonzero" ,
1343
- original_stabilization = "1.34.0" ,
1344
- leading_zeros_test = -1i64 ,
1345
1330
}
1346
1331
1347
1332
nonzero_integer ! {
1348
1333
Self = NonZeroI128 ,
1349
1334
Primitive = signed i128 ,
1350
1335
UnsignedNonZero = NonZeroU128 ,
1351
1336
UnsignedPrimitive = u128 ,
1352
- feature = "signed_nonzero" ,
1353
- original_stabilization = "1.34.0" ,
1354
- leading_zeros_test = -1i128 ,
1355
1337
}
1356
1338
1357
1339
nonzero_integer ! {
1358
1340
Self = NonZeroIsize ,
1359
1341
Primitive = signed isize ,
1360
1342
UnsignedNonZero = NonZeroUsize ,
1361
1343
UnsignedPrimitive = usize ,
1362
- feature = "signed_nonzero" ,
1363
- original_stabilization = "1.34.0" ,
1364
- leading_zeros_test = -1isize ,
1365
1344
}
0 commit comments