diff --git a/infer/src/backend/callbacks.ml b/infer/src/backend/callbacks.ml index b9c36a006..c1cc51874 100644 --- a/infer/src/backend/callbacks.ml +++ b/infer/src/backend/callbacks.ml @@ -45,10 +45,10 @@ let get_procedure_definition exe_env proc_name = let get_language proc_name = if Typ.Procname.is_java proc_name then Config.Java else Config.Clang (** Invoke all registered procedure callbacks on the given procedure. *) -let iterate_procedure_callbacks exe_env summary caller_pname = - let procedure_language = get_language caller_pname in +let iterate_procedure_callbacks get_proc_desc exe_env summary proc_desc = + let proc_name = Procdesc.get_proc_name proc_desc in + let procedure_language = get_language proc_name in Config.curr_language := procedure_language ; - let get_proc_desc proc_name = Exe_env.get_proc_desc exe_env proc_name in let get_procs_in_file proc_name = match Exe_env.get_cfg exe_env proc_name with | Some cfg @@ -56,16 +56,13 @@ let iterate_procedure_callbacks exe_env summary caller_pname = | None -> [] in - match get_procedure_definition exe_env caller_pname with - | None - -> summary - | Some (tenv, proc_desc) - -> List.fold ~init:summary - ~f:(fun summary (language, proc_callback) -> - if Config.equal_language language procedure_language then - proc_callback {get_proc_desc; get_procs_in_file; tenv; summary; proc_desc} - else summary) - !procedure_callbacks + let tenv = Exe_env.get_tenv exe_env proc_name in + List.fold ~init:summary + ~f:(fun summary (language, proc_callback) -> + if Config.equal_language language procedure_language then + proc_callback {get_proc_desc; get_procs_in_file; tenv; summary; proc_desc} + else summary) + !procedure_callbacks (** Invoke all registered cluster callbacks on a cluster of procedures. *) let iterate_cluster_callbacks all_procs exe_env get_proc_desc = @@ -90,10 +87,6 @@ let iterate_callbacks call_graph exe_env = (* analyze all the currently defined procedures *) Cg.get_defined_nodes call_graph in - let analyze_ondemand summary proc_desc = - let proc_name = Procdesc.get_proc_name proc_desc in - iterate_procedure_callbacks exe_env summary proc_name - in let get_proc_desc proc_name = match Exe_env.get_proc_desc exe_env proc_name with | Some pdesc @@ -103,6 +96,9 @@ let iterate_callbacks call_graph exe_env = | None -> None in + let analyze_ondemand summary proc_desc = + iterate_procedure_callbacks get_proc_desc exe_env summary proc_desc + in let callbacks = {Ondemand.analyze_ondemand= analyze_ondemand; get_proc_desc} in (* Create and register on-demand analysis callback *) let analyze_proc_name pname =