1mod ast;
2mod parse;
3mod emit;
4mod update;
5
6#[proc_macro]
7pub fn xflags(_ts: proc_macro::TokenStream) -> proc_macro::TokenStream {
8 #[cfg(not(test))]
10 {
11 let text = match parse::xflags(_ts) {
12 Ok(cmd) => emit::emit(&cmd),
13 Err(err) => format!("compile_error!(\"invalid flags syntax, {err}\");"),
14 };
15 text.parse().unwrap()
16 }
17 #[cfg(test)]
18 unimplemented!()
19}
20
21#[proc_macro]
22pub fn parse_or_exit(_ts: proc_macro::TokenStream) -> proc_macro::TokenStream {
23 #[cfg(not(test))]
25 {
26 let text = match parse::parse_or_exit(_ts) {
27 Ok(cmd) => emit::emit(&cmd),
28 Err(err) => format!("compile_error!(\"invalid flags syntax, {err}\")"),
29 };
30 text.parse().unwrap()
31 }
32 #[cfg(test)]
33 {
34 let _ = parse::parse_or_exit;
35 unimplemented!();
36 }
37}
38
39#[cfg(test)]
40pub fn compile(src: &str) -> String {
41 use proc_macro2::TokenStream;
42
43 let ts = src.parse::<TokenStream>().unwrap();
44 let cmd = parse::xflags(ts).unwrap();
45 emit::emit(&cmd)
46}