1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
extern crate proc_macro; mod gen_source; mod generate; mod ir; mod parse; mod state; use quote::quote; #[proc_macro_attribute] pub fn script( attr: proc_macro::TokenStream, item: proc_macro::TokenStream, ) -> proc_macro::TokenStream { let attr = syn::parse_macro_input!(attr as syn::AttributeArgs); let func = syn::parse_macro_input!(item as syn::ItemFn); let parsed_script = parse::parse_script(attr, func); let script_ident = quote! {__script_vec}; let mut generate_script = generate::GenerateScript { script_ident: script_ident.clone(), variant_states: state::VariantStates { states: Default::default(), predicate_atoms: vec![], }, n_ident: 0, stmt_idx: 0, max_line_widths: vec![30, 40, 60, 80], formatted_lines: vec![], }; let result = generate_script.run(parsed_script); result.into() }