From 1078b9d418331718a504dad7683b865d2f636f76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr> Date: Tue, 28 Jan 2020 13:45:23 +0100 Subject: [PATCH] [Eva] Uses Map.union instead of Map.merge. --- .../value/engine/subdivided_evaluation.ml | 14 +++--- src/plugins/value/legacy/eval_terms.ml | 8 +--- src/plugins/value/utils/structure.ml | 9 +--- src/plugins/value/utils/value_results.ml | 8 +--- src/plugins/value_types/widen_type.ml | 45 +++++++------------ 5 files changed, 27 insertions(+), 57 deletions(-) diff --git a/src/plugins/value/engine/subdivided_evaluation.ml b/src/plugins/value/engine/subdivided_evaluation.ml index b832e789d36..9a2864ae1c1 100644 --- a/src/plugins/value/engine/subdivided_evaluation.ml +++ b/src/plugins/value/engine/subdivided_evaluation.ml @@ -67,16 +67,12 @@ let union expr depth map1 map2 = let top = ref LvalSet.empty in (* Lvalues such that a lvalue from [!top] appears in their subexpression. *) let deps = ref LvalSet.empty in - let merge lval a b = match a, b with - | None, None -> None - | Some x, None - | None, Some x -> Some x - | Some (_, _, deps1), Some (_, _, deps2) -> - top := LvalSet.add lval !top; - deps := LvalSet.union (LvalSet.union deps1 deps2) !deps; - Some (expr, depth, LvalSet.union deps1 deps2) + let merge lval (_, _, deps1) (_, _, deps2) = + top := LvalSet.add lval !top; + deps := LvalSet.union (LvalSet.union deps1 deps2) !deps; + Some (expr, depth, LvalSet.union deps1 deps2) in - let map = LvalMap.merge merge map1 map2 in + let map = LvalMap.union merge map1 map2 in LvalMap.mapi (fun lval (e, d, lvs) -> (* Alls lvalues in [expr] now appear in the subexpression of [!top]. *) diff --git a/src/plugins/value/legacy/eval_terms.ml b/src/plugins/value/legacy/eval_terms.ml index 291139e5ccd..44ac39bcd7a 100644 --- a/src/plugins/value/legacy/eval_terms.ml +++ b/src/plugins/value/legacy/eval_terms.ml @@ -164,13 +164,9 @@ let find_or_alarm ~alarm_mode state loc = type labels_states = Cvalue.Model.t Logic_label.Map.t let join_label_states m1 m2 = - let aux _ s1 s2 = match s1, s2 with - | None, None -> None - | Some s, None | None, Some s -> Some s - | Some s1, Some s2 -> Some (Cvalue.Model.join s1 s2) - in + let aux _ s1 s2 = Some (Cvalue.Model.join s1 s2) in if m1 == m2 then m1 - else Logic_label.Map.merge aux m1 m2 + else Logic_label.Map.union aux m1 m2 (* The logic can refer to the state at other points of the program using labels. [e_cur] indicates the current label (in changes when diff --git a/src/plugins/value/utils/structure.ml b/src/plugins/value/utils/structure.ml index c30e307d2f8..02faf9f20ee 100644 --- a/src/plugins/value/utils/structure.ml +++ b/src/plugins/value/utils/structure.ml @@ -140,11 +140,6 @@ module Open type 'a getter = Get : ('a, 'b) get -> 'a getter - let merge _k a b = match a, b with - | Some _, _ -> a - | _, Some _ -> b - | None, None -> assert false - let lift_get f (Get (key, get)) = Get (key, fun t -> get (f t)) let rec compute_getters : type a. a structure -> (a getter) KMap.t = function @@ -153,7 +148,7 @@ module Open | Node (left, right) -> let l = compute_getters left and r = compute_getters right in let l = KMap.map (lift_get fst) l and r = KMap.map (lift_get snd) r in - KMap.merge merge l r + KMap.union (fun _k a _b -> Some a) l r let getters = compute_getters M.structure let get (type a) (key: a Shape.key) : (M.t -> a) option = @@ -177,7 +172,7 @@ module Open let l = compute_setters left and r = compute_setters right in let l = KMap.map (lift_set (fun set (l, r) -> set l, r)) l and r = KMap.map (lift_set (fun set (l, r) -> l, set r)) r in - KMap.merge merge l r + KMap.union (fun _k a _b -> Some a) l r let setters = compute_setters M.structure let set (type a) (key: a Shape.key) : (a -> M.t -> M.t) = diff --git a/src/plugins/value/utils/value_results.ml b/src/plugins/value/utils/value_results.ml index d82bc2853b2..57748e2f270 100644 --- a/src/plugins/value/utils/value_results.ml +++ b/src/plugins/value/utils/value_results.ml @@ -319,12 +319,8 @@ let merge r1 r2 = | True, True -> True in let merge_callers _ m1 m2 = - let aux _kf s1 s2 = match s1, s2 with - | None, None -> None - | None, s | s, None -> s - | Some s1, Some s2 -> Some (Stmt.Set.union s1 s2) - in - Kernel_function.Map.merge aux m1 m2 + let aux _kf s1 s2 = Some (Stmt.Set.union s1 s2) in + Kernel_function.Map.union aux m1 m2 in let merge_s_cs = StmtH.merge merge_cs in let main = match r1.main, r2.main with diff --git a/src/plugins/value_types/widen_type.ml b/src/plugins/value_types/widen_type.ml index ad9bdd90604..55917e30b50 100644 --- a/src/plugins/value_types/widen_type.ml +++ b/src/plugins/value_types/widen_type.ml @@ -88,40 +88,33 @@ include Datatype.Make(struct end) let join wh1 wh2 = - let map_merge s_join os1 os2 = - match os1, os2 with - | Some bs1, Some bs2 -> Some (s_join bs1 bs2) - | Some bs, None | None, Some bs -> Some bs - | None, None -> None - in + let map_union s_join _key bs1 bs2 = Some (s_join bs1 bs2) in { priority_bases = - Stmt.Map.merge (fun _key -> map_merge Base.Set.union) + Stmt.Map.union (map_union Base.Set.union) wh1.priority_bases wh2.priority_bases; default_hints = Ival.Widen_Hints.union wh1.default_hints wh2.default_hints; default_float_hints = Fc_float.Widen_Hints.union wh1.default_float_hints wh2.default_float_hints; default_hints_by_stmt = - Stmt.Map.merge (fun _key -> map_merge Ival.Widen_Hints.union) + Stmt.Map.union (map_union Ival.Widen_Hints.union) wh1.default_hints_by_stmt wh2.default_hints_by_stmt; default_float_hints_by_stmt = - Stmt.Map.merge (fun _key -> map_merge Fc_float.Widen_Hints.union) + Stmt.Map.union (map_union Fc_float.Widen_Hints.union) wh1.default_float_hints_by_stmt wh2.default_float_hints_by_stmt; hints_by_addr = - Base.Map.merge (fun _key -> map_merge Ival.Widen_Hints.union) + Base.Map.union (map_union Ival.Widen_Hints.union) wh1.hints_by_addr wh2.hints_by_addr; float_hints_by_addr = - Base.Map.merge (fun _key -> map_merge Fc_float.Widen_Hints.union) + Base.Map.union (map_union Fc_float.Widen_Hints.union) wh1.float_hints_by_addr wh2.float_hints_by_addr; hints_by_addr_by_stmt = - Stmt.Map.merge (fun _key -> - map_merge (Base.Map.merge - (fun _key -> map_merge Ival.Widen_Hints.union))) + Stmt.Map.union + (map_union (Base.Map.union (map_union Ival.Widen_Hints.union))) wh1.hints_by_addr_by_stmt wh2.hints_by_addr_by_stmt; float_hints_by_addr_by_stmt = - Stmt.Map.merge (fun _key -> - map_merge (Base.Map.merge - (fun _key -> map_merge Fc_float.Widen_Hints.union))) + Stmt.Map.union + (map_union (Base.Map.union (map_union Fc_float.Widen_Hints.union))) wh1.float_hints_by_addr_by_stmt wh2.float_hints_by_addr_by_stmt; } @@ -196,23 +189,17 @@ let hints_from_keys stmt h = let int_hints_by_base = try let at_stmt = Stmt.Map.find stmt h.hints_by_addr_by_stmt in - Base.Map.merge (fun _b os1 os2 -> - match os1, os2 with - | Some s1, Some s2 -> Some (Ival.Widen_Hints.union s1 s2) - | Some s, None | None, Some s -> Some s - | None, None -> None - ) at_stmt h.hints_by_addr + Base.Map.union + (fun _b s1 s2 -> Some (Ival.Widen_Hints.union s1 s2)) + at_stmt h.hints_by_addr with Not_found -> h.hints_by_addr in let float_hints_by_base = try let at_stmt = Stmt.Map.find stmt h.float_hints_by_addr_by_stmt in - Base.Map.merge (fun _b os1 os2 -> - match os1, os2 with - | Some s1, Some s2 -> Some (Fc_float.Widen_Hints.union s1 s2) - | Some s, None | None, Some s -> Some s - | None, None -> None - ) at_stmt h.float_hints_by_addr + Base.Map.union + (fun _b s1 s2 -> Some (Fc_float.Widen_Hints.union s1 s2)) + at_stmt h.float_hints_by_addr with Not_found -> h.float_hints_by_addr in let prio = -- GitLab