need to test extractstate

This commit is contained in:
Rowan Torbitzky-Lane 2025-04-17 15:52:10 -05:00
parent d697e14173
commit 38f94e4e8e
2 changed files with 24 additions and 2 deletions

View File

@ -1,4 +1,5 @@
use crate::utils::varfunc::VarFunc;
use crate::utils::extractstate::Extract;
use quote::quote;
use syn::parse_macro_input;
@ -10,6 +11,12 @@ pub fn run_func(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
quote! { #f }.into()
}
#[proc_macro]
pub fn run_extract(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
let f = parse_macro_input!(input as Extract);
quote! { #f }.into()
}
#[cfg(test)]
mod tests {
use super::*;

View File

@ -12,7 +12,7 @@ use quote::{ToTokens, quote};
use std::cmp::PartialEq;
use syn::parse::{Parse, ParseStream};
struct Extract {
pub struct Extract {
state: State,
stacks: Vec<Stack>,
}
@ -27,8 +27,23 @@ impl Parse for Extract {
impl ToTokens for Extract {
fn to_tokens(&self, tokens: &mut TokenStream2) {
let state = &self.state;
let inner_state = &self.state.0;
let stacks = &self.stacks;
let mut counts = Vec::new();
for stack in stacks {
match counts.iter_mut().find(|(x, _)| x == stack) {
Some((_, count)) => *count += 1,
None => counts.push((stack, 1)),
}
}
for (stack, count) in counts {
let inner_stack = &stack.0;
tokens.extend(quote! {
#inner_state.#inner_stack < #count
})
}
}
}