From 153fb3681409b5ef937e0aace44c33415dad2804 Mon Sep 17 00:00:00 2001 From: Nilstrieb <48135649+Nilstrieb@users.noreply.github.com> Date: Sun, 6 Nov 2022 15:26:37 +0100 Subject: [PATCH] int --- src/lib.rs | 2 ++ src/unroll_int.rs | 38 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 src/unroll_int.rs diff --git a/src/lib.rs b/src/lib.rs index ea0baad..240bdc8 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,6 +1,8 @@ #![feature(ptr_metadata)] +#![feature(trace_macros)] mod cfg_match; +mod unroll_int; mod unsized_clone; pub use unsized_clone::*; diff --git a/src/unroll_int.rs b/src/unroll_int.rs new file mode 100644 index 0000000..6771527 --- /dev/null +++ b/src/unroll_int.rs @@ -0,0 +1,38 @@ +macro_rules! create_unroll_int { + // (_, 5) => 5 + (replace@ ($a:tt, $($b:tt)*)) => { $($b)* }; + + // 2, 1, 0 => [0, 0, 0] + (turn_into_zero_array@ $($num:literal)*) => { + [$( create_unroll_int!(replace@ ($num, 0)) ),*] + }; + + ($first:literal $($rest:literal)* | $($acc:tt)*) => { + create_unroll_int! { + $($rest)* + | + ($first) => { create_unroll_int!(turn_into_zero_array@ $($rest)*) }; + $($acc)* + } + }; + + (| $($acc:tt)*) => { + macro_rules! unroll_int { + $($acc)* + } + }; + + ($($num:literal)*) => { + create_unroll_int! { $($num)* | } + }; +} + +create_unroll_int! { + // 20 19 18 17 16 15 14 13 12 11 + //10 9 8 7 6 5 4 3 + 2 1 0 +} + +fn x() { + let x = unroll_int!(0); +}