about summary refs log tree commit diff
diff options
context:
space:
mode:
authorCaio <c410.f3r@gmail.com>2024-09-13 15:00:33 -0300
committerCaio <c410.f3r@gmail.com>2024-09-13 15:00:33 -0300
commit561a6c5f117535b9aec84ca2341fdc8f0cdb0dd5 (patch)
tree357f15ce843f63ff11f9fd54ea5aebb3d65b437f
parent38e3a5771cefc9362976a605549f8b04d5707311 (diff)
downloadrust-561a6c5f117535b9aec84ca2341fdc8f0cdb0dd5.tar.gz
rust-561a6c5f117535b9aec84ca2341fdc8f0cdb0dd5.zip
[`cfg_match`] Generalize inputs
-rw-r--r--library/core/src/macros/mod.rs10
-rw-r--r--library/core/tests/macros.rs20
2 files changed, 25 insertions, 5 deletions
diff --git a/library/core/src/macros/mod.rs b/library/core/src/macros/mod.rs
index 888832251f6..aa0646846e4 100644
--- a/library/core/src/macros/mod.rs
+++ b/library/core/src/macros/mod.rs
@@ -229,8 +229,8 @@ pub macro assert_matches {
 pub macro cfg_match {
     // with a final wildcard
     (
-        $(cfg($initial_meta:meta) => { $($initial_tokens:item)* })+
-        _ => { $($extra_tokens:item)* }
+        $(cfg($initial_meta:meta) => { $($initial_tokens:tt)* })+
+        _ => { $($extra_tokens:tt)* }
     ) => {
         cfg_match! {
             @__items ();
@@ -241,7 +241,7 @@ pub macro cfg_match {
 
     // without a final wildcard
     (
-        $(cfg($extra_meta:meta) => { $($extra_tokens:item)* })*
+        $(cfg($extra_meta:meta) => { $($extra_tokens:tt)* })*
     ) => {
         cfg_match! {
             @__items ();
@@ -256,7 +256,7 @@ pub macro cfg_match {
     (@__items ($($_:meta,)*);) => {},
     (
         @__items ($($no:meta,)*);
-        (($($yes:meta)?) ($($tokens:item)*)),
+        (($($yes:meta)?) ($($tokens:tt)*)),
         $($rest:tt,)*
     ) => {
         // Emit all items within one block, applying an appropriate #[cfg]. The
@@ -279,7 +279,7 @@ pub macro cfg_match {
 
     // Internal macro to make __apply work out right for different match types,
     // because of how macros match/expand stuff.
-    (@__identity $($tokens:item)*) => {
+    (@__identity $($tokens:tt)*) => {
         $($tokens)*
     }
 }
diff --git a/library/core/tests/macros.rs b/library/core/tests/macros.rs
index 09994fbcbdb..416d8fba391 100644
--- a/library/core/tests/macros.rs
+++ b/library/core/tests/macros.rs
@@ -1,3 +1,5 @@
+#![allow(unused_must_use)]
+
 #[allow(dead_code)]
 trait Trait {
     fn blah(&self);
@@ -173,3 +175,21 @@ fn cfg_match_two_functions() {
         bar2();
     }
 }
+
+fn _accepts_expressions() -> i32 {
+    cfg_match! {
+        cfg(unix) => { 1 }
+        _ => { 2 }
+    }
+}
+
+// The current implementation expands to a macro call, which allows the use of expression
+// statements.
+fn _allows_stmt_expr_attributes() {
+    let one = 1;
+    let two = 2;
+    cfg_match! {
+        cfg(unix) => { one * two; }
+        _ => { one + two; }
+    }
+}
\ No newline at end of file