]>
git.proxmox.com Git - rustc.git/blob - src/test/ui/proc-macro/auxiliary/test-macros.rs
4 // Proc macros commonly used by tests.
5 // `panic`/`print` -> `panic_bang`/`print_bang` to avoid conflicts with standard macros.
7 #![crate_type = "proc-macro"]
9 extern crate proc_macro
;
10 use proc_macro
::TokenStream
;
12 // Macro that return empty token stream.
15 pub fn empty(_
: TokenStream
) -> TokenStream
{
19 #[proc_macro_attribute]
20 pub fn empty_attr(_
: TokenStream
, _
: TokenStream
) -> TokenStream
{
24 #[proc_macro_derive(Empty, attributes(empty_helper))]
25 pub fn empty_derive(_
: TokenStream
) -> TokenStream
{
32 pub fn panic_bang(_
: TokenStream
) -> TokenStream
{
36 #[proc_macro_attribute]
37 pub fn panic_attr(_
: TokenStream
, _
: TokenStream
) -> TokenStream
{
41 #[proc_macro_derive(Panic, attributes(panic_helper))]
42 pub fn panic_derive(_
: TokenStream
) -> TokenStream
{
43 panic
!("panic-derive");
46 // Macros that return the input stream.
49 pub fn identity(input
: TokenStream
) -> TokenStream
{
53 #[proc_macro_attribute]
54 pub fn identity_attr(_
: TokenStream
, input
: TokenStream
) -> TokenStream
{
58 #[proc_macro_derive(Identity, attributes(identity_helper))]
59 pub fn identity_derive(input
: TokenStream
) -> TokenStream
{
63 // Macros that iterate and re-collect the input stream.
66 pub fn recollect(input
: TokenStream
) -> TokenStream
{
67 input
.into_iter().collect()
70 #[proc_macro_attribute]
71 pub fn recollect_attr(_
: TokenStream
, input
: TokenStream
) -> TokenStream
{
72 input
.into_iter().collect()
75 #[proc_macro_derive(Recollect, attributes(recollect_helper))]
76 pub fn recollect_derive(input
: TokenStream
) -> TokenStream
{
77 input
.into_iter().collect()
80 // Macros that print their input in the original and re-collected forms (if they differ).
82 fn print_helper(input
: TokenStream
, kind
: &str) -> TokenStream
{
83 let input_display
= format
!("{}", input
);
84 let input_debug
= format
!("{:#?}", input
);
85 let recollected
= input
.into_iter().collect();
86 let recollected_display
= format
!("{}", recollected
);
87 let recollected_debug
= format
!("{:#?}", recollected
);
88 println
!("PRINT-{} INPUT (DISPLAY): {}", kind
, input_display
);
89 if recollected_display
!= input_display
{
90 println
!("PRINT-{} RE-COLLECTED (DISPLAY): {}", kind
, recollected_display
);
92 println
!("PRINT-{} INPUT (DEBUG): {}", kind
, input_debug
);
93 if recollected_debug
!= input_debug
{
94 println
!("PRINT-{} RE-COLLECTED (DEBUG): {}", kind
, recollected_debug
);
100 pub fn print_bang(input
: TokenStream
) -> TokenStream
{
101 print_helper(input
, "BANG")
105 pub fn print_bang_consume(input
: TokenStream
) -> TokenStream
{
106 print_helper(input
, "BANG");
110 #[proc_macro_attribute]
111 pub fn print_attr(_
: TokenStream
, input
: TokenStream
) -> TokenStream
{
112 print_helper(input
, "ATTR")
115 #[proc_macro_derive(Print, attributes(print_helper))]
116 pub fn print_derive(input
: TokenStream
) -> TokenStream
{
117 print_helper(input
, "DERIVE");