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}