changeset 776:94033091458b

formats: Update to ${concat(…)} to build on current nightly ${concat(…)} replaces the removed concat_idents!() macro, but doesn’t support being used in nested repetitions for now. We can remove the gen_match!() macro once this is supported again.
author Link Mauve <linkmauve@linkmauve.fr>
date Tue, 14 Oct 2025 12:41:29 +0000
parents 28d8b892fd06
children 11249e4b4e03
files formats/src/lib.rs formats/src/th06/anm0.rs formats/src/th06/ecl.rs formats/src/th06/std.rs
diffstat 4 files changed, 23 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/formats/src/lib.rs
+++ b/formats/src/lib.rs
@@ -1,4 +1,4 @@
-#![feature(concat_idents)]
+#![feature(macro_metavar_expr_concat)]
 #![deny(missing_docs)]
 
 //! Touhou formats.
--- a/formats/src/th06/anm0.rs
+++ b/formats/src/th06/anm0.rs
@@ -108,6 +108,12 @@
     }))
 }
 
+macro_rules! gen_match {
+    ($arg_type:ident) => {
+        ${concat(le_, $arg_type)}
+    };
+}
+
 macro_rules! declare_anm_instructions {
     ($($opcode:tt => fn $name:ident($($arg:ident: $arg_type:ident),*)),*,) => {
         /// Available instructions in an `Anm0`.
@@ -124,7 +130,7 @@
                 $(
                     $opcode => {
                         $(
-                            let (i2, $arg) = concat_idents!(le_, $arg_type)(i)?;
+                            let (i2, $arg) = gen_match!($arg_type)(i)?;
                             i = i2;
                         )*
                         Instruction::$name($($arg),*)
--- a/formats/src/th06/ecl.rs
+++ b/formats/src/th06/ecl.rs
@@ -117,6 +117,12 @@
     }
 }
 
+macro_rules! gen_match {
+    ($arg_type:ident) => {
+        ${concat(le_, $arg_type)}
+    };
+}
+
 macro_rules! declare_main_instructions {
     ($($opcode:tt => fn $name:ident($($arg:ident: $arg_type:ident),*)),*,) => {
         /// Available instructions in an `Ecl`.
@@ -134,7 +140,7 @@
                 $(
                     $opcode => {
                         $(
-                            let (i2, $arg) = concat_idents!(le_, $arg_type)(i)?;
+                            let (i2, $arg) = gen_match!($arg_type)(i)?;
                             i = i2;
                         )*
                         MainInstruction::$name($($arg),*)
@@ -172,7 +178,7 @@
                 $(
                     $opcode => {
                         $(
-                            let (i2, $arg) = concat_idents!(le_, $arg_type)(i)?;
+                            let (i2, $arg) = gen_match!($arg_type)(i)?;
                             i = i2;
                         )*
                         SubInstruction::$name($($arg),*)
--- a/formats/src/th06/std.rs
+++ b/formats/src/th06/std.rs
@@ -124,6 +124,12 @@
     }
 }
 
+macro_rules! gen_match {
+    ($arg_type:ident) => {
+        ${concat(le_, $arg_type)}
+    };
+}
+
 macro_rules! declare_stage_instructions {
     ($($opcode:tt => fn $name:ident($($arg:ident: $arg_type:ident),*)),*,) => {
         /// Available instructions in an `Stage`.
@@ -141,7 +147,7 @@
                 $(
                     $opcode => {
                         $(
-                            let (i2, $arg) = concat_idents!(le_, $arg_type)(i)?;
+                            let (i2, $arg) = gen_match!($arg_type)(i)?;
                             i = i2;
                         )*
                         Instruction::$name($($arg),*)