c2rust-refactor 0.15.0

C2Rust refactoring tool implementation
#![feature(
    i128_type,
    rustc_private,
    trace_macros,
)]
#[macro_use] extern crate c2rust_refactor;

use c2rust_refactor::command::{Registry, FuncCommand, RefactorState};

fn mark_fields(state: &mut RefactorState) {
    state.run("select", &["dummy",
        "
            crate;
            desc(struct && name(\"lh_table\"));
            mark(target0); mark(target1); mark(target2); mark(target3); mark(target4);
            reset;
        "]);

    state.run("print_marks", &[""]);
    let fields = ["collisions", "resizes", "lookups", "inserts", "deletes"];
    for (i, &field) in fields.iter().enumerate() {
        state.run("mark_field_uses", &[field, &format!("target{}", i)]);
        state.run("rename_marks", &[&format!("target{}", i) as &str, "target"]);
        eprintln!(" -- after {}", field);
        state.run("print_marks", &[""]);
    }
}

#[no_mangle]
pub fn register_commands(reg: &mut Registry) {
    reg.register("lh_table_counter_cell_1", |args| {
        let args = args.clone();
        Box::new(FuncCommand(move |state: &mut RefactorState| {

            mark_fields(state);
            state.run("rewrite_expr", &["marked!(__e)", "*__e.as_ptr()"]);

        }))
    });

    reg.register("lh_table_counter_cell_2", |args| {
        let args = args.clone();
        Box::new(FuncCommand(move |state: &mut RefactorState| {

            mark_fields(state);
            state.run("rewrite_expr", &["*marked!(__e).as_ptr() = __f", "__e.set(__f)"]);

            mark_fields(state);
            state.run("rewrite_expr", &["*marked!(__e).as_ptr()", "__e.get()"]);

        }))
    });
}