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::varfunc::VarFunc;
use crate::utils::extractstate::Extract;
use quote::quote; use quote::quote;
use syn::parse_macro_input; use syn::parse_macro_input;
@ -10,6 +11,12 @@ pub fn run_func(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
quote! { #f }.into() 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)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;

View File

@ -12,7 +12,7 @@ use quote::{ToTokens, quote};
use std::cmp::PartialEq; use std::cmp::PartialEq;
use syn::parse::{Parse, ParseStream}; use syn::parse::{Parse, ParseStream};
struct Extract { pub struct Extract {
state: State, state: State,
stacks: Vec<Stack>, stacks: Vec<Stack>,
} }
@ -27,8 +27,23 @@ impl Parse for Extract {
impl ToTokens for Extract { impl ToTokens for Extract {
fn to_tokens(&self, tokens: &mut TokenStream2) { fn to_tokens(&self, tokens: &mut TokenStream2) {
let state = &self.state; let inner_state = &self.state.0;
let stacks = &self.stacks; 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
})
}
} }
} }