Skip to content

Commit 500a041

Browse files
committed
Let forward_ref_* macros accept multiple attributes, and require attributes explicitly
1 parent a001497 commit 500a041

File tree

5 files changed

+156
-105
lines changed

5 files changed

+156
-105
lines changed

library/core/src/internal_macros.rs

Lines changed: 8 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,8 @@
11
// implements the unary operator "op &T"
22
// based on "op T" where T is expected to be `Copy`able
33
macro_rules! forward_ref_unop {
4-
(impl $imp:ident, $method:ident for $t:ty) => {
5-
forward_ref_unop!(impl $imp, $method for $t,
6-
#[stable(feature = "rust1", since = "1.0.0")]);
7-
};
8-
(impl $imp:ident, $method:ident for $t:ty, #[$attr:meta]) => {
9-
#[$attr]
4+
(impl $imp:ident, $method:ident for $t:ty, $(#[$attr:meta])+) => {
5+
$(#[$attr])+
106
impl $imp for &$t {
117
type Output = <$t as $imp>::Output;
128

@@ -21,12 +17,8 @@ macro_rules! forward_ref_unop {
2117
// implements binary operators "&T op U", "T op &U", "&T op &U"
2218
// based on "T op U" where T and U are expected to be `Copy`able
2319
macro_rules! forward_ref_binop {
24-
(impl $imp:ident, $method:ident for $t:ty, $u:ty) => {
25-
forward_ref_binop!(impl $imp, $method for $t, $u,
26-
#[stable(feature = "rust1", since = "1.0.0")]);
27-
};
28-
(impl $imp:ident, $method:ident for $t:ty, $u:ty, #[$attr:meta]) => {
29-
#[$attr]
20+
(impl $imp:ident, $method:ident for $t:ty, $u:ty, $(#[$attr:meta])+) => {
21+
$(#[$attr])+
3022
impl<'a> $imp<$u> for &'a $t {
3123
type Output = <$t as $imp<$u>>::Output;
3224

@@ -37,7 +29,7 @@ macro_rules! forward_ref_binop {
3729
}
3830
}
3931

40-
#[$attr]
32+
$(#[$attr])+
4133
impl $imp<&$u> for $t {
4234
type Output = <$t as $imp<$u>>::Output;
4335

@@ -48,7 +40,7 @@ macro_rules! forward_ref_binop {
4840
}
4941
}
5042

51-
#[$attr]
43+
$(#[$attr])+
5244
impl $imp<&$u> for &$t {
5345
type Output = <$t as $imp<$u>>::Output;
5446

@@ -64,12 +56,8 @@ macro_rules! forward_ref_binop {
6456
// implements "T op= &U", based on "T op= U"
6557
// where U is expected to be `Copy`able
6658
macro_rules! forward_ref_op_assign {
67-
(impl $imp:ident, $method:ident for $t:ty, $u:ty) => {
68-
forward_ref_op_assign!(impl $imp, $method for $t, $u,
69-
#[stable(feature = "op_assign_builtins_by_ref", since = "1.22.0")]);
70-
};
71-
(impl $imp:ident, $method:ident for $t:ty, $u:ty, #[$attr:meta]) => {
72-
#[$attr]
59+
(impl $imp:ident, $method:ident for $t:ty, $u:ty, $(#[$attr:meta])+) => {
60+
$(#[$attr])+
7361
impl $imp<&$u> for $t {
7462
#[inline]
7563
#[track_caller]

library/core/src/num/saturating.rs

Lines changed: 50 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,8 @@ impl<T: fmt::UpperHex> fmt::UpperHex for Saturating<T> {
109109
// // *self = *self << other;
110110
// // }
111111
// // }
112-
// // forward_ref_op_assign! { impl ShlAssign, shl_assign for Saturating<$t>, $f }
112+
// // forward_ref_op_assign! { impl ShlAssign, shl_assign for Saturating<$t>, $f,
113+
// // #[unstable(feature = "saturating_int_impl", issue = "87920")] }
113114
//
114115
// #[unstable(feature = "saturating_int_impl", issue = "87920")]
115116
// impl Shr<$f> for Saturating<$t> {
@@ -134,7 +135,8 @@ impl<T: fmt::UpperHex> fmt::UpperHex for Saturating<T> {
134135
// *self = *self >> other;
135136
// }
136137
// }
137-
// forward_ref_op_assign! { impl ShrAssign, shr_assign for Saturating<$t>, $f }
138+
// forward_ref_op_assign! { impl ShrAssign, shr_assign for Saturating<$t>, $f,
139+
// #[unstable(feature = "saturating_int_impl", issue = "87920")] }
138140
// };
139141
// }
140142
//
@@ -159,7 +161,8 @@ impl<T: fmt::UpperHex> fmt::UpperHex for Saturating<T> {
159161
// *self = *self << other;
160162
// }
161163
// }
162-
// forward_ref_op_assign! { impl ShlAssign, shl_assign for Saturating<$t>, $f }
164+
// forward_ref_op_assign! { impl ShlAssign, shl_assign for Saturating<$t>, $f,
165+
// #[unstable(feature = "saturating_int_impl", issue = "87920")] }
163166
//
164167
// #[unstable(feature = "saturating_int_impl", issue = "87920")]
165168
// impl Shr<$f> for Saturating<$t> {
@@ -180,7 +183,8 @@ impl<T: fmt::UpperHex> fmt::UpperHex for Saturating<T> {
180183
// *self = *self >> other;
181184
// }
182185
// }
183-
// forward_ref_op_assign! { impl ShrAssign, shr_assign for Saturating<$t>, $f }
186+
// forward_ref_op_assign! { impl ShrAssign, shr_assign for Saturating<$t>, $f,
187+
// #[unstable(feature = "saturating_int_impl", issue = "87920")] }
184188
// };
185189
// }
186190
//
@@ -218,7 +222,7 @@ macro_rules! saturating_impl {
218222
}
219223
}
220224
forward_ref_binop! { impl Add, add for Saturating<$t>, Saturating<$t>,
221-
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
225+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
222226

223227
#[stable(feature = "saturating_int_impl", since = "1.74.0")]
224228
impl AddAssign for Saturating<$t> {
@@ -227,7 +231,8 @@ macro_rules! saturating_impl {
227231
*self = *self + other;
228232
}
229233
}
230-
forward_ref_op_assign! { impl AddAssign, add_assign for Saturating<$t>, Saturating<$t> }
234+
forward_ref_op_assign! { impl AddAssign, add_assign for Saturating<$t>, Saturating<$t>,
235+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
231236

232237
#[stable(feature = "saturating_int_assign_impl", since = "1.74.0")]
233238
impl AddAssign<$t> for Saturating<$t> {
@@ -236,7 +241,8 @@ macro_rules! saturating_impl {
236241
*self = *self + Saturating(other);
237242
}
238243
}
239-
forward_ref_op_assign! { impl AddAssign, add_assign for Saturating<$t>, $t }
244+
forward_ref_op_assign! { impl AddAssign, add_assign for Saturating<$t>, $t,
245+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
240246

241247
#[stable(feature = "saturating_int_impl", since = "1.74.0")]
242248
impl Sub for Saturating<$t> {
@@ -248,7 +254,7 @@ macro_rules! saturating_impl {
248254
}
249255
}
250256
forward_ref_binop! { impl Sub, sub for Saturating<$t>, Saturating<$t>,
251-
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
257+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
252258

253259
#[stable(feature = "saturating_int_impl", since = "1.74.0")]
254260
impl SubAssign for Saturating<$t> {
@@ -257,7 +263,8 @@ macro_rules! saturating_impl {
257263
*self = *self - other;
258264
}
259265
}
260-
forward_ref_op_assign! { impl SubAssign, sub_assign for Saturating<$t>, Saturating<$t> }
266+
forward_ref_op_assign! { impl SubAssign, sub_assign for Saturating<$t>, Saturating<$t>,
267+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
261268

262269
#[stable(feature = "saturating_int_assign_impl", since = "1.74.0")]
263270
impl SubAssign<$t> for Saturating<$t> {
@@ -266,7 +273,8 @@ macro_rules! saturating_impl {
266273
*self = *self - Saturating(other);
267274
}
268275
}
269-
forward_ref_op_assign! { impl SubAssign, sub_assign for Saturating<$t>, $t }
276+
forward_ref_op_assign! { impl SubAssign, sub_assign for Saturating<$t>, $t,
277+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
270278

271279
#[stable(feature = "saturating_int_impl", since = "1.74.0")]
272280
impl Mul for Saturating<$t> {
@@ -278,7 +286,7 @@ macro_rules! saturating_impl {
278286
}
279287
}
280288
forward_ref_binop! { impl Mul, mul for Saturating<$t>, Saturating<$t>,
281-
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
289+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
282290

283291
#[stable(feature = "saturating_int_impl", since = "1.74.0")]
284292
impl MulAssign for Saturating<$t> {
@@ -287,7 +295,8 @@ macro_rules! saturating_impl {
287295
*self = *self * other;
288296
}
289297
}
290-
forward_ref_op_assign! { impl MulAssign, mul_assign for Saturating<$t>, Saturating<$t> }
298+
forward_ref_op_assign! { impl MulAssign, mul_assign for Saturating<$t>, Saturating<$t>,
299+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
291300

292301
#[stable(feature = "saturating_int_assign_impl", since = "1.74.0")]
293302
impl MulAssign<$t> for Saturating<$t> {
@@ -296,7 +305,8 @@ macro_rules! saturating_impl {
296305
*self = *self * Saturating(other);
297306
}
298307
}
299-
forward_ref_op_assign! { impl MulAssign, mul_assign for Saturating<$t>, $t }
308+
forward_ref_op_assign! { impl MulAssign, mul_assign for Saturating<$t>, $t,
309+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
300310

301311
/// # Examples
302312
///
@@ -323,8 +333,7 @@ macro_rules! saturating_impl {
323333
}
324334
}
325335
forward_ref_binop! { impl Div, div for Saturating<$t>, Saturating<$t>,
326-
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
327-
336+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
328337

329338
#[stable(feature = "saturating_int_impl", since = "1.74.0")]
330339
impl DivAssign for Saturating<$t> {
@@ -333,7 +342,8 @@ macro_rules! saturating_impl {
333342
*self = *self / other;
334343
}
335344
}
336-
forward_ref_op_assign! { impl DivAssign, div_assign for Saturating<$t>, Saturating<$t> }
345+
forward_ref_op_assign! { impl DivAssign, div_assign for Saturating<$t>, Saturating<$t>,
346+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
337347

338348
#[stable(feature = "saturating_int_assign_impl", since = "1.74.0")]
339349
impl DivAssign<$t> for Saturating<$t> {
@@ -342,7 +352,8 @@ macro_rules! saturating_impl {
342352
*self = *self / Saturating(other);
343353
}
344354
}
345-
forward_ref_op_assign! { impl DivAssign, div_assign for Saturating<$t>, $t }
355+
forward_ref_op_assign! { impl DivAssign, div_assign for Saturating<$t>, $t,
356+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
346357

347358
#[stable(feature = "saturating_int_impl", since = "1.74.0")]
348359
impl Rem for Saturating<$t> {
@@ -354,7 +365,7 @@ macro_rules! saturating_impl {
354365
}
355366
}
356367
forward_ref_binop! { impl Rem, rem for Saturating<$t>, Saturating<$t>,
357-
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
368+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
358369

359370
#[stable(feature = "saturating_int_impl", since = "1.74.0")]
360371
impl RemAssign for Saturating<$t> {
@@ -363,7 +374,8 @@ macro_rules! saturating_impl {
363374
*self = *self % other;
364375
}
365376
}
366-
forward_ref_op_assign! { impl RemAssign, rem_assign for Saturating<$t>, Saturating<$t> }
377+
forward_ref_op_assign! { impl RemAssign, rem_assign for Saturating<$t>, Saturating<$t>,
378+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
367379

368380
#[stable(feature = "saturating_int_assign_impl", since = "1.74.0")]
369381
impl RemAssign<$t> for Saturating<$t> {
@@ -372,7 +384,8 @@ macro_rules! saturating_impl {
372384
*self = *self % Saturating(other);
373385
}
374386
}
375-
forward_ref_op_assign! { impl RemAssign, rem_assign for Saturating<$t>, $t }
387+
forward_ref_op_assign! { impl RemAssign, rem_assign for Saturating<$t>, $t,
388+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
376389

377390
#[stable(feature = "saturating_int_impl", since = "1.74.0")]
378391
impl Not for Saturating<$t> {
@@ -384,7 +397,7 @@ macro_rules! saturating_impl {
384397
}
385398
}
386399
forward_ref_unop! { impl Not, not for Saturating<$t>,
387-
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
400+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
388401

389402
#[stable(feature = "saturating_int_impl", since = "1.74.0")]
390403
impl BitXor for Saturating<$t> {
@@ -396,7 +409,7 @@ macro_rules! saturating_impl {
396409
}
397410
}
398411
forward_ref_binop! { impl BitXor, bitxor for Saturating<$t>, Saturating<$t>,
399-
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
412+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
400413

401414
#[stable(feature = "saturating_int_impl", since = "1.74.0")]
402415
impl BitXorAssign for Saturating<$t> {
@@ -405,7 +418,8 @@ macro_rules! saturating_impl {
405418
*self = *self ^ other;
406419
}
407420
}
408-
forward_ref_op_assign! { impl BitXorAssign, bitxor_assign for Saturating<$t>, Saturating<$t> }
421+
forward_ref_op_assign! { impl BitXorAssign, bitxor_assign for Saturating<$t>, Saturating<$t>,
422+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
409423

410424
#[stable(feature = "saturating_int_assign_impl", since = "1.74.0")]
411425
impl BitXorAssign<$t> for Saturating<$t> {
@@ -414,7 +428,8 @@ macro_rules! saturating_impl {
414428
*self = *self ^ Saturating(other);
415429
}
416430
}
417-
forward_ref_op_assign! { impl BitXorAssign, bitxor_assign for Saturating<$t>, $t }
431+
forward_ref_op_assign! { impl BitXorAssign, bitxor_assign for Saturating<$t>, $t,
432+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
418433

419434
#[stable(feature = "saturating_int_impl", since = "1.74.0")]
420435
impl BitOr for Saturating<$t> {
@@ -426,7 +441,7 @@ macro_rules! saturating_impl {
426441
}
427442
}
428443
forward_ref_binop! { impl BitOr, bitor for Saturating<$t>, Saturating<$t>,
429-
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
444+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
430445

431446
#[stable(feature = "saturating_int_impl", since = "1.74.0")]
432447
impl BitOrAssign for Saturating<$t> {
@@ -435,7 +450,8 @@ macro_rules! saturating_impl {
435450
*self = *self | other;
436451
}
437452
}
438-
forward_ref_op_assign! { impl BitOrAssign, bitor_assign for Saturating<$t>, Saturating<$t> }
453+
forward_ref_op_assign! { impl BitOrAssign, bitor_assign for Saturating<$t>, Saturating<$t>,
454+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
439455

440456
#[stable(feature = "saturating_int_assign_impl", since = "1.74.0")]
441457
impl BitOrAssign<$t> for Saturating<$t> {
@@ -444,7 +460,8 @@ macro_rules! saturating_impl {
444460
*self = *self | Saturating(other);
445461
}
446462
}
447-
forward_ref_op_assign! { impl BitOrAssign, bitor_assign for Saturating<$t>, $t }
463+
forward_ref_op_assign! { impl BitOrAssign, bitor_assign for Saturating<$t>, $t,
464+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
448465

449466
#[stable(feature = "saturating_int_impl", since = "1.74.0")]
450467
impl BitAnd for Saturating<$t> {
@@ -456,7 +473,7 @@ macro_rules! saturating_impl {
456473
}
457474
}
458475
forward_ref_binop! { impl BitAnd, bitand for Saturating<$t>, Saturating<$t>,
459-
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
476+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
460477

461478
#[stable(feature = "saturating_int_impl", since = "1.74.0")]
462479
impl BitAndAssign for Saturating<$t> {
@@ -465,7 +482,8 @@ macro_rules! saturating_impl {
465482
*self = *self & other;
466483
}
467484
}
468-
forward_ref_op_assign! { impl BitAndAssign, bitand_assign for Saturating<$t>, Saturating<$t> }
485+
forward_ref_op_assign! { impl BitAndAssign, bitand_assign for Saturating<$t>, Saturating<$t>,
486+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
469487

470488
#[stable(feature = "saturating_int_assign_impl", since = "1.74.0")]
471489
impl BitAndAssign<$t> for Saturating<$t> {
@@ -474,7 +492,8 @@ macro_rules! saturating_impl {
474492
*self = *self & Saturating(other);
475493
}
476494
}
477-
forward_ref_op_assign! { impl BitAndAssign, bitand_assign for Saturating<$t>, $t }
495+
forward_ref_op_assign! { impl BitAndAssign, bitand_assign for Saturating<$t>, $t,
496+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
478497

479498
)*)
480499
}
@@ -939,7 +958,7 @@ macro_rules! saturating_int_impl_signed {
939958
}
940959
}
941960
forward_ref_unop! { impl Neg, neg for Saturating<$t>,
942-
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
961+
#[stable(feature = "saturating_int_impl", since = "1.74.0")] }
943962
)*)
944963
}
945964

0 commit comments

Comments
 (0)