let sast_to_cast klass_data (klasses : Sast.class_def list) : Cast.program =
    let (funcs, mains) = sast_functions klasses in
    let main_case (f : Sast.func_def) = (f.inklass, get_fname f) in
    let cfuncs = List.map sast_to_cast_func funcs in
    let main_switch = List.map main_case mains in
    let struct_map = build_class_struct_map klass_data klasses in
    let ancestor_data = klass_data.ancestors in

    (struct_map, cfuncs, main_switch, StringMap.map List.rev ancestor_data)