104_enum_op_tree/
104_enum_op_tree.rs1use std::env;
2
3use libperl_sys::op;
4use libperl_rs::Perl;
5
6mod eg;
7use eg::op0::*;
8
9#[cfg(perlapi_ver26)]
10pub struct Walker<'a> {
11 pub perl: &'a Perl,
12 pub cv: *const libperl_sys::cv,
13}
14
15#[cfg(perlapi_ver26)]
16impl<'a> Walker<'a> {
17 pub fn walk(&'a self, o: *const op, level: isize) {
18 print!("{}", " ".repeat(level as usize));
19 println!("{:?} {:?}", op_name(o), op_extract(&self.perl, self.cv, o));
20 for kid in sibling_iter(o) {
21 self.walk(kid, level+1);
22 }
23 }
24}
25
26#[cfg(perlapi_ver26)]
27fn my_test() {
28 let mut perl = Perl::new();
29 perl.parse_env_args(env::args(), env::vars());
30
31 let walker = Walker {perl: &perl, cv: perl.get_main_cv()};
32
33 walker.walk(perl.get_main_root(), 0);
34}
35
36#[cfg(not(perlapi_ver26))]
37fn my_test() {
38 println!("Requires perl >= 5.26");
39}
40
41fn main() {
42 my_test();
43}