| //@ force-host |
| //@ no-prefer-dynamic |
| |
| #![feature(proc_macro_quote)] |
| #![feature(proc_macro_internals)] // FIXME - this shouldn't be necessary |
| #![crate_type = "proc-macro"] |
| |
| extern crate proc_macro; |
| extern crate custom_quote; |
| |
| use proc_macro::{quote, TokenStream}; |
| |
| macro_rules! expand_to_quote { |
| () => { |
| quote! { |
| let bang_error: bool = 25; |
| } |
| } |
| } |
| |
| #[proc_macro] |
| pub fn error_from_bang(_input: TokenStream) -> TokenStream { |
| expand_to_quote!() |
| } |
| |
| #[proc_macro] |
| pub fn other_error_from_bang(_input: TokenStream) -> TokenStream { |
| custom_quote::custom_quote! { |
| my_ident |
| } |
| } |
| |
| #[proc_macro_attribute] |
| pub fn error_from_attribute(_args: TokenStream, _input: TokenStream) -> TokenStream { |
| quote! { |
| struct AttributeError { |
| field: MissingType |
| } |
| } |
| } |
| |
| #[proc_macro_derive(ErrorFromDerive)] |
| pub fn error_from_derive(_input: TokenStream) -> TokenStream { |
| quote! { |
| enum DeriveError { |
| Variant(OtherMissingType) |
| } |
| } |
| } |