1#[macro_export]
2macro_rules! pt {
3 [ $func:ident($($args:expr),*) $($other:tt)+] => {{
4 let mut temp = $func($($args),*);
5 pt![temp $($other)+]
6 }};
7 [ $a:ident . $b:ident $(($($args:expr),*))?. $($other:tt)+] => {{
8 let mut temp = &mut $a.$b$(($($args),*))?;
9 ref_pt![temp . $($other)+]
10 }};
11 [ $a:ident . $b:ident $(($($args:expr),*))?-> $($other:tt)+] => {{
12 let mut temp = &mut $a.$b$(($($args),*))?;
13 ref_pt![temp -> $($other)+]
14 }};
15 [ $a:ident -> $b:ident $(($($args:expr),*))?. $($other:tt)+] => {{
16 let mut temp = &mut (*$a).$b$(($($args),*))?;
17 ref_pt![temp . $($other)+]
18 }};
19 [ $a:ident -> $b:ident $(($($args:expr),*))?-> $($other:tt)+] => {{
20 let mut temp = &mut (*$a).$b$(($($args),*))?;
21 ref_pt![temp -> $($other)+]
22 }};
23 [ $a:ident . $b:ident $(($($args:expr),*))? ] => {{
24 &mut $a.$b$(($($args),*))?
25 }};
26 [ $a:ident -> $b:ident $(($($args:expr),*))? ] => {{
27 &mut (*$a).$b$(($($args),*))?
28 }};
29
30 [ $a:ident . $b:ident $(($($args:expr),*))? = $c:ident $($other:tt)+] => {{
31 $a.$b$(($($args),*))? = *pt![$c $($other)+];
32 }};
33 [ $a:ident -> $b:ident $(($($args:expr),*))? = $c:ident $($other:tt)+] => {{
34 (*$a).$b$(($($args),*))? = *pt![$c $($other)+];
35 }};
36 [ $a:ident . $b:ident $(($($args:expr),*))? = $c:expr] => {{
37 $a.$b$(($($args),*))? = $c;
38 }};
39 [ $a:ident -> $b:ident $(($($args:expr),*))? = $c:expr] => {{
40 (*$a).$b$(($($args),*))? = $c;
41 }};
42}
43
44#[macro_export]
45macro_rules! ref_pt {
46 [ $a:ident . $b:ident $(($($args:expr),*))?. $($other:tt)+] => {{
47 let mut temp = &mut (*$a).$b$(($($args),*))?;
48 ref_pt![temp . $($other)+]
49 }};
50 [ $a:ident . $b:ident $(($($args:expr),*))?-> $($other:tt)+] => {{
51 let mut temp = &mut (*$a).$b$(($($args),*))?;
52 ref_pt![temp -> $($other)+]
53 }};
54 [ $a:ident -> $b:ident $(($($args:expr),*))?. $($other:tt)+] => {{
55 let mut temp = &mut (**$a).$b$(($($args),*))?;
56 ref_pt![temp . $($other)+]
57 }};
58 [ $a:ident -> $b:ident $(($($args:expr),*))?-> $($other:tt)+] => {{
59 let mut temp = &mut (**$a).$b$(($($args),*))?;
60 ref_pt![temp -> $($other)+]
61 }};
62 [ $a:ident . $b:ident $(($($args:expr),*))? ] => {{
63 &mut (*$a).$b$(($($args),*))?
64 }};
65 [ $a:ident -> $b:ident $(($($args:expr),*))? ] => {{
66 &mut (**$a).$b$(($($args),*))?
67 }};
68
69 [ $a:ident . $b:ident $(($($args:expr),*))? = $c:ident $($other:tt)+] => {{
70 (*$a).$b$(($($args),*))? = *pt![$c $($other)+];
71 }};
72 [ $a:ident -> $b:ident $(($($args:expr),*))? = $c:ident $($other:tt)+] => {{
73 (**$a).$b$(($($args),*))? = *pt![$c $($other)+];
74 }};
75 [ $a:ident . $b:ident $(($($args:expr),*))? = $c:expr] => {{
76 (*$a).$b$(($($args),*))? = $c;
77 }};
78 [ $a:ident -> $b:ident $(($($args:expr),*))? = $c:expr] => {{
79 (**$a).$b$(($($args),*))? = $c;
80 }};
81}