better macro usage

This commit is contained in:
Tove 2025-02-20 00:23:40 +01:00
parent 5b501c7a8c
commit 80252e4335
Signed by: TudbuT
GPG key ID: B3CF345217F202D3
3 changed files with 18 additions and 9 deletions

9
Cargo.lock generated
View file

@ -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",
]

View file

@ -10,3 +10,4 @@ authors = ["TudbuT"]
[dependencies]
readformat = "0.1"
multicall = "0.1"
ident_concat = "0.3"

View file

@ -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)
};
}
}