104_enum_op_tree/
104_enum_op_tree.rs

1use 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}