commit 09d783169b88629bd48860a373e959a56a5dc24d Author: Goren Barak Date: Thu Nov 30 13:48:29 2023 -0500 initial commit diff --git a/temp.rs b/temp.rs new file mode 100644 index 0000000..9421c9a --- /dev/null +++ b/temp.rs @@ -0,0 +1,40 @@ +extern crate proc_macro; +use proc_macro::TokenStream; +use proc_macro::TokenTree; +use proc_macro::Ident; +use proc_macro::Span; +use std::iter::FromIterator; +static mut TEMP_COUNTER: i64 = 0; + +#[proc_macro] +pub fn temp(item: TokenStream) -> TokenStream { + let mut iterator = item.clone().into_iter().peekable(); + if item.is_empty() { + unsafe { TEMP_COUNTER += 1; } + } else if let Some(TokenTree::Literal(_)) = iterator.peek() { + if let Ok(number) = item.to_string().parse::() { + unsafe { TEMP_COUNTER = number; } + } + } else if let Some(TokenTree::Punct(i)) = iterator.next() { + if i.as_char() == '+' { + if let Some(TokenTree::Literal(i)) = iterator.next() { + if let Ok(number) = i.to_string().parse::() { + unsafe { TEMP_COUNTER += number; } + } + } + } else if i.as_char() == '-' { + if let Some(TokenTree::Literal(i)) = iterator.next() { + if let Ok(number) = i.to_string().parse::() { + unsafe { TEMP_COUNTER -= number; } + } + } else if let None = iterator.next() { + + } + } + } else { + panic!("Invalid input to temporary variable generator."); + } + TokenStream::from_iter([ + TokenTree::Ident(Ident::new(format!("temp{}", unsafe { TEMP_COUNTER }).as_str(), Span::call_site())) + ]) +}