p_macro/
lib.rs

1#[macro_export]
2macro_rules! __p_c {
3    ($y:expr) => { print!("{:?}", $y); }
4}
5
6#[macro_export]
7macro_rules! __p_u {
8    ($y:expr) => { print!("{}", $y); }
9}
10
11#[macro_export]
12macro_rules! __p_b {
13    ($y:expr) => { print!("{} = {:?}", stringify!($y), $y); }
14}
15
16#[macro_export]
17macro_rules! p {
18    () => {
19        println!("");
20    };
21
22
23    (: $y:expr) =>  { __p_c!($y); p!(); };
24    (: $y:expr,) => { __p_c!($y); p!(); };
25    (: $y:expr;) => { __p_c!($y); p!(); };
26
27    (: $y:expr, $($x:tt)+) => {
28        __p_c!($y);
29        print!(" ");
30        p!($($x)*);
31    };
32
33    (: $y:expr; $($x:tt)+) => {
34        __p_c!($y);
35        p!();
36        p!($($x)*);
37    };
38
39
40    (_ $y:expr) =>  { __p_u!($y); p!(); };
41    (_ $y:expr,) => { __p_u!($y); p!(); };
42    (_ $y:expr;) => { __p_u!($y); p!(); };
43
44    (_ $y:expr, $($x:tt)+) => {
45        __p_u!($y);
46        print!(" ");
47        p!($($x)*);
48    };
49
50    (_ $y:expr; $($x:tt)+) => {
51        __p_u!($y);
52        p!();
53        p!($($x)*);
54    };
55
56
57    ($y:expr) =>  { __p_b!($y); p!(); };
58    ($y:expr,) => { __p_b!($y); p!(); };
59    ($y:expr;) => { __p_b!($y); p!(); };
60
61    ($y:expr, $($x:tt)+) => {
62        __p_b!($y);
63        print!(", ");
64        p!($($x)*);
65    };
66    
67    ($y:expr; $($x:tt)+) => {
68        __p_b!($y);
69        p!();
70        p!($($x)*);
71    };
72}