diff --git a/Cargo.lock b/Cargo.lock index 8fdb82b..28b57b0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1,6 +1,12 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -version = 3 +version = 4 + +[[package]] +name = "ident_concat" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9d8a30341e754d424ef08dbc16d24564ed3438dc6ffcf72cdbd91529496e362e" [[package]] name = "multicall" @@ -18,6 +24,7 @@ checksum = "b03f7fbd470aa8b3ad163c85cce8bccfc11cc9c44ef12da0a4eddd98bd307352" name = "spl" version = "0.4.2" dependencies = [ + "ident_concat", "multicall", "readformat", ] diff --git a/Cargo.toml b/Cargo.toml index 4f36b0d..2a3cff7 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,3 +10,4 @@ authors = ["TudbuT"] [dependencies] readformat = "0.1" multicall = "0.1" +ident_concat = "0.3" diff --git a/src/lib.rs b/src/lib.rs index 4b72453..3ca3009 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -39,6 +39,7 @@ pub mod stream; pub use lexer::*; pub use runtime::*; +use ident_concat::ident; use std::fs; /// Creates a runtime, lexes and executes some SPL code from a file, returning the stack that was @@ -104,8 +105,8 @@ nofmt! { #[macro_export] macro_rules! require_mut_on_stack { ($name:tt, $type:tt, $stack:expr, $fn:literal) => { - let binding = $stack.pop(); - let Value::$type(ref mut $name) = binding.lock().native else { + let ident!($name binding) = $stack.pop(); + let Value::$type(ref mut $name) = ident!($name binding).lock().native else { return $stack.err(ErrorKind::InvalidCall($fn.to_owned())) }; }; @@ -146,15 +147,15 @@ nofmt! { #[macro_export] macro_rules! require_array_on_stack { ($name:tt, $stack:expr, $fn:literal) => { - let binding = $stack.pop(); - require_array!($name, binding, $stack, $fn) + let ident!($name binding) = $stack.pop(); + require_array!($name, ident!($name binding), $stack, $fn) }; } #[macro_export] macro_rules! require_byte_array_on_stack { ($name:tt, $stack:expr, $fn:literal) => { - let binding = $stack.pop(); - let $name = match binding.lock_ro().native { + let ident!($name binding) = $stack.pop(); + let $name = match ident!($name binding).lock_ro().native { Value::Array(ref x) => x .iter() .cloned() @@ -178,8 +179,8 @@ nofmt! { #[macro_export] macro_rules! require_mut_array_on_stack { ($name:tt, $stack:expr, $fn:literal) => { - let binding = $stack.pop(); - require_mut_array!($name, binding, $stack, $fn) + let ident!($name binding) = $stack.pop(); + require_mut_array!($name, ident!($name binding), $stack, $fn) }; } }