1 macro_rules! imp { 2 ($name:ident) => { 3 pub struct $name { 4 pub op: usize, 5 } 6 impl $name { 7 pub fn op() {} 8 pub fn cmp() {} 9 pub fn map() {} 10 pub fn pop() {} 11 pub fn ptr() {} 12 pub fn rpo() {} 13 pub fn drop() {} 14 pub fn copy() {} 15 pub fn zip() {} 16 pub fn sup() {} 17 pub fn pa() {} 18 pub fn pb() {} 19 pub fn pc() {} 20 pub fn pd() {} 21 pub fn pe() {} 22 pub fn pf() {} 23 pub fn pg() {} 24 pub fn ph() {} 25 pub fn pi() {} 26 pub fn pj() {} 27 pub fn pk() {} 28 pub fn pl() {} 29 pub fn pm() {} 30 pub fn pn() {} 31 pub fn po() {} 32 } 33 }; 34 ($name:ident, $($names:ident),*) => { 35 imp!($name); 36 imp!($($names),*); 37 }; 38 } 39 macro_rules! en { 40 ($name:ident) => { 41 pub enum $name { 42 Ptr, 43 Rp, 44 Rpo, 45 Pt, 46 Drop, 47 Dr, 48 Dro, 49 Sup, 50 Op, 51 Cmp, 52 Map, 53 Mp, 54 } 55 }; 56 ($name:ident, $($names:ident),*) => { 57 en!($name); 58 en!($($names),*); 59 }; 60 } 61 62 imp!(Ot, Foo, Cmp, Map, Loc, Lac, Toc, Si, Sig, Sip, Psy, Psi, Py, Pi, Pa, Pb, Pc, Pd); 63 imp!(Pe, Pf, Pg, Ph, Pj, Pk, Pl, Pm, Pn, Po, Pq, Pr, Ps, Pt, Pu, Pv, Pw, Px, Pz, Ap, Bp, Cp); 64 imp!(Dp, Ep, Fp, Gp, Hp, Ip, Jp, Kp, Lp, Mp, Np, Op, Pp, Qp, Rp, Sp, Tp, Up, Vp, Wp, Xp, Yp, Zp); 65 66 en!(Place, Plac, Plae, Plce, Pace, Scalar, Scalr, Scaar, Sclar, Salar); 67 68 pub struct P; 69