let sast_functions (klasses : Sast.class_def list) =
    (* Map a Sast class to its functions *)
    let get_functions (klass : Sast.class_def) =
        let s = klass.sections in
        let funcs = function
            | Sast.MethodMem(m) -> Some(m)
            | Sast.InitMem(i) -> Some(i)
            | _ -> None in
        let get_funcs mems = Util.filter_option (List.map funcs mems) in
        List.flatten [ get_funcs s.publics ; get_funcs s.protects ; get_funcs s.privates ; s.refines ; s.mains ] in

    let all_functions = List.flatten (List.map get_functions klasses) in
    let all_mains = List.flatten (List.map (fun k -> k.sections.mains) klasses) in

    (all_functions, all_mains)