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
extern crate proc_macro; use proc_macro::{TokenStream}; use syn::parse_macro_input; use quote::quote; #[proc_macro_attribute] pub fn entrypoint(_attr: TokenStream, item: TokenStream) -> TokenStream { let fun = parse_macro_input!(item as syn::ItemFn); if fun.sig.inputs.len() > 0 { panic!("Function must have 0 arguments") } let name = fun.sig.ident.clone(); let res = quote! { #fun #[no_mangle] fn _ipcs_start() { #name(); } }; res.into() }