diff options
Diffstat (limited to 'syn-mid/examples/const_fn')
-rw-r--r-- | syn-mid/examples/const_fn/Cargo.toml | 16 | ||||
-rw-r--r-- | syn-mid/examples/const_fn/lib.rs | 31 |
2 files changed, 0 insertions, 47 deletions
diff --git a/syn-mid/examples/const_fn/Cargo.toml b/syn-mid/examples/const_fn/Cargo.toml deleted file mode 100644 index d823e76..0000000 --- a/syn-mid/examples/const_fn/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "const_fn" -version = "0.0.0" -authors = ["Taiki Endo <te316e89@gmail.com>"] -edition = "2018" -publish = false - -[lib] -proc-macro = true -path = "lib.rs" - -[dependencies] -proc-macro2 = "1.0" -quote = "1.0" -syn = "1.0" -syn-mid = { version = "0.4", path = "../..", features = ["clone-impls"] } diff --git a/syn-mid/examples/const_fn/lib.rs b/syn-mid/examples/const_fn/lib.rs deleted file mode 100644 index 29255f2..0000000 --- a/syn-mid/examples/const_fn/lib.rs +++ /dev/null @@ -1,31 +0,0 @@ -#![warn(rust_2018_idioms)] - -extern crate proc_macro; - -use proc_macro::TokenStream; -use proc_macro2::TokenStream as TokenStream2; -use quote::quote; -use syn_mid::ItemFn; - -/// An attribute for easy generation of a const function with conditional compilations. -#[proc_macro_attribute] -pub fn const_fn(args: TokenStream, function: TokenStream) -> TokenStream { - assert!(!args.is_empty(), "requires an argument"); - - let mut function = syn::parse_macro_input!(function as ItemFn); - let mut const_function = function.clone(); - - if function.constness.is_some() { - function.constness = None; - } else { - const_function.constness = Some(Default::default()); - } - - let args = TokenStream2::from(args); - TokenStream::from(quote! { - #[cfg(not(#args))] - #function - #[cfg(#args)] - #const_function - }) -} |