[clang] Reimplement removing nodes from procdesc in a more efficient way

master
Dulma Rodriguez 10 years ago
parent 35400dd4f6
commit c9f07e31e3

@ -60,7 +60,6 @@ module Node = struct
let exn_sink_kind = Stmt_node "exceptions sink"
let throw_kind = Stmt_node "throw"
type cfg = (** data type for the control flow graph *)
{ node_id : int ref;
node_list : t list ref;
@ -359,15 +358,26 @@ module Node = struct
(** Counter for identifiers of procdescs *)
let proc_desc_id_counter = ref 0
let remove_node cfg node =
let remove_node' filter_out_fun cfg node =
let remove_node_in_cfg nodes =
list_filter (fun node' -> not (equal node node')) nodes in
list_filter filter_out_fun nodes in
cfg.node_list := remove_node_in_cfg !(cfg.node_list)
let remove_node cfg node =
remove_node' (fun node' -> not (equal node node'))
cfg node
let remove_node_set cfg nodes =
remove_node' (fun node' -> not (NodeSet.mem node' nodes))
cfg nodes
let proc_desc_remove cfg name remove_nodes =
(if remove_nodes then
let pdesc = pdesc_tbl_find cfg name in
list_iter (remove_node cfg) pdesc.pd_nodes);
let proc_nodes =
list_fold_right (fun node set -> NodeSet.add node set)
pdesc.pd_nodes NodeSet.empty in
remove_node_set cfg proc_nodes);
pdesc_tbl_remove cfg name
let proc_desc_get_start_node proc_desc =
@ -802,6 +812,7 @@ let remove_abducted_retvars p =
| Sil.Eexp (e, _) -> Sil.ExpSet.add e exps
| Sil.Estruct (flds, _) ->
list_fold_left (fun exps (_, strexp) -> collect_exps exps strexp) exps flds
| Sil.Earray (_, elems, _) ->
list_fold_left (fun exps (index, strexp) -> collect_exps exps strexp) exps elems in
let rec compute_reachable_hpreds_rec sigma (reach, exps) =

Loading…
Cancel
Save