From 11fc7b51a768a9874279393de6cb4d71d9ae5f0b Mon Sep 17 00:00:00 2001 From: Allan Blanchard <allan.blanchard@cea.fr> Date: Mon, 12 Sep 2022 16:57:30 +0200 Subject: [PATCH] [Extlib] removed opt_fold (Option.fold) --- src/kernel_services/ast_data/annotations.ml | 8 +++++--- src/libraries/stdlib/extlib.ml | 5 ----- src/libraries/stdlib/extlib.mli | 3 --- src/plugins/dive/dive_graph.ml | 3 ++- src/plugins/eva/domains/cvalue/cvalue_domain.ml | 7 +++---- src/plugins/eva/domains/gauges/gauges_domain.ml | 3 ++- src/plugins/eva/domains/offsm_domain.ml | 3 ++- src/plugins/eva/domains/simple_memory.ml | 9 ++++++--- src/plugins/eva/domains/symbolic_locs.ml | 3 ++- src/plugins/eva/engine/mem_exec.ml | 3 ++- src/plugins/eva/engine/transfer_stmt.ml | 3 ++- 11 files changed, 26 insertions(+), 24 deletions(-) diff --git a/src/kernel_services/ast_data/annotations.ml b/src/kernel_services/ast_data/annotations.ml index e1d697bb238..480675355fe 100644 --- a/src/kernel_services/ast_data/annotations.ml +++ b/src/kernel_services/ast_data/annotations.ml @@ -694,12 +694,14 @@ let fold_disjoint f = (fun f l acc -> List.fold_left (Fun.flip f) acc l) f +let fold_opt_spec f opt default = + Option.fold ~some:(fun v -> f v default) ~none:default opt + let fold_terminates f = - fold_spec_gen - (fun s -> s.spec_terminates) Extlib.opt_fold f + fold_spec_gen (fun s -> s.spec_terminates) fold_opt_spec f let fold_decreases f = - fold_spec_gen (fun s -> s.spec_variant) Extlib.opt_fold f + fold_spec_gen (fun s -> s.spec_variant) fold_opt_spec f let fold_bhv_gen get fold f kf b acc = let get spec = diff --git a/src/libraries/stdlib/extlib.ml b/src/libraries/stdlib/extlib.ml index 301f71af912..0ce56cce839 100644 --- a/src/libraries/stdlib/extlib.ml +++ b/src/libraries/stdlib/extlib.ml @@ -220,11 +220,6 @@ let list_slice ?(first = 0) ?last l = (** {2 Options} *) (* ************************************************************************* *) -let opt_fold f o b = - match o with - | None -> b - | Some a -> f a b - let merge_opt f k o1 o2 = match o1,o2 with | None, None -> None diff --git a/src/libraries/stdlib/extlib.mli b/src/libraries/stdlib/extlib.mli index 2173d5cf200..c641d93e5f3 100644 --- a/src/libraries/stdlib/extlib.mli +++ b/src/libraries/stdlib/extlib.mli @@ -177,9 +177,6 @@ val list_slice: ?first:int -> ?last:int -> 'a list -> 'a list (** {2 Options} *) (* ************************************************************************* *) -val opt_fold: ('a -> 'b -> 'b) -> 'a option -> 'b -> 'b -(** @since Oxygen-20120901 *) - (** [merge f k a b] returns - [None] if both [a] and [b] are [None] - [Some a'] (resp. [b'] if [b] (resp [a]) is [None] diff --git a/src/plugins/dive/dive_graph.ml b/src/plugins/dive/dive_graph.ml index 4f16e8c40ff..736d4eb7df4 100644 --- a/src/plugins/dive/dive_graph.ml +++ b/src/plugins/dive/dive_graph.ml @@ -124,8 +124,9 @@ let edges g = let update_node_values node new_values typ = + let join n = Cvalue.V.join n new_values in node.node_values <- - Some (Extlib.opt_fold Cvalue.V.join node.node_values new_values); + Some (Option.fold ~some:join ~none:new_values node.node_values); node.node_range <- Node_range.(upper_bound node.node_range (evaluate new_values typ)) diff --git a/src/plugins/eva/domains/cvalue/cvalue_domain.ml b/src/plugins/eva/domains/cvalue/cvalue_domain.ml index 68d1f194f99..87574b29cf8 100644 --- a/src/plugins/eva/domains/cvalue/cvalue_domain.ml +++ b/src/plugins/eva/domains/cvalue/cvalue_domain.ml @@ -270,11 +270,10 @@ module State = struct let (pre, clob) = pre in let (post, post_clob) = post in Locals_scoping.(remember_bases_with_locals clob post_clob.clob); - let post = - Extlib.opt_fold - (finalize_recursive_call stmt call ~pre:(pre, clob)) - recursion post + let finalize a = + finalize_recursive_call stmt call ~pre:(pre, clob) a post in + let post = Option.fold ~some:finalize ~none:post recursion in Cvalue_transfer.finalize_call stmt call recursion ~pre ~post >>-: fun state -> state, clob diff --git a/src/plugins/eva/domains/gauges/gauges_domain.ml b/src/plugins/eva/domains/gauges/gauges_domain.ml index 829afa08364..0345dca18f3 100644 --- a/src/plugins/eva/domains/gauges/gauges_domain.ml +++ b/src/plugins/eva/domains/gauges/gauges_domain.ml @@ -1221,7 +1221,8 @@ module D : Abstract_domain.Leaf match function_calls_handling with | FullInterprocedural -> update valuation state >>-: fun state -> - Extlib.opt_fold start_recursive_call recursion state + let start_recursive_call r = start_recursive_call r state in + Option.fold ~some:start_recursive_call ~none:state recursion | IntraproceduralAll | IntraproceduralNonReferenced -> `Value G.empty in diff --git a/src/plugins/eva/domains/offsm_domain.ml b/src/plugins/eva/domains/offsm_domain.ml index 396598578c7..56278f16b37 100644 --- a/src/plugins/eva/domains/offsm_domain.ml +++ b/src/plugins/eva/domains/offsm_domain.ml @@ -164,7 +164,8 @@ module D : Abstract_domain.Leaf let start_call _stmt _call recursion valuation state = update valuation state >>-: fun state -> - Extlib.opt_fold start_recursive_call recursion state + let start_recursive_call r = start_recursive_call r state in + Option.fold ~some:start_recursive_call ~none:state recursion let extract_expr ~oracle:_ _context _state _exp = `Value (Offsm_value.Offsm.top, None), Alarmset.all diff --git a/src/plugins/eva/domains/simple_memory.ml b/src/plugins/eva/domains/simple_memory.ml index a0ba820a46f..833f2ee7072 100644 --- a/src/plugins/eva/domains/simple_memory.ml +++ b/src/plugins/eva/domains/simple_memory.ml @@ -266,14 +266,16 @@ module Make_Domain (Info: sig val name: string end) (Value: Value) = struct abstraction of the domain itself. *) let assume _stmt _expr _pos = update - let start_recusive_call recursion state = + let start_recursive_call recursion state = let state = remove_variables recursion.withdrawal state in (* No collision should occur in the substitution. *) let decide _key _v1 _v2 = assert false in snd (replace_key ~decide recursion.base_substitution state) let start_call _stmt call recursion _valuation state = - let state = Extlib.opt_fold start_recusive_call recursion state in + let state = + let start_recursive_call r = start_recursive_call r state in + Option.fold ~some:start_recursive_call ~none:state recursion in let bind_argument state argument = let typ = argument.formal.vtype in let loc = Main_locations.PLoc.eval_varinfo argument.formal in @@ -292,7 +294,8 @@ module Make_Domain (Info: sig val name: string end) (Value: Value) = struct let finalize_call _stmt call recursion ~pre ~post = let kf_name = Kernel_function.get_name call.kf in - let post = Extlib.opt_fold (finalize_recursive_call ~pre) recursion post in + let finalize a = finalize_recursive_call ~pre a post in + let post = Option.fold ~some:finalize ~none:post recursion in match find_builtin kf_name, call.return with | None, _ | _, None -> `Value post | Some f, Some return -> diff --git a/src/plugins/eva/domains/symbolic_locs.ml b/src/plugins/eva/domains/symbolic_locs.ml index 5ab410de611..f1cf77a8110 100644 --- a/src/plugins/eva/domains/symbolic_locs.ml +++ b/src/plugins/eva/domains/symbolic_locs.ml @@ -570,7 +570,8 @@ module D : Abstract_domain.Leaf let start_call _stmt _call recursion valuation state = update valuation state >>-: fun state -> - Extlib.opt_fold start_recursive_call recursion state + let start_recursive_call r = start_recursive_call r state in + Option.fold ~some:start_recursive_call ~none:state recursion let finalize_call _stmt _call _recursion ~pre:_ ~post = `Value post diff --git a/src/plugins/eva/engine/mem_exec.ml b/src/plugins/eva/engine/mem_exec.ml index cf8268830c4..afc4d3c6c05 100644 --- a/src/plugins/eva/engine/mem_exec.ml +++ b/src/plugins/eva/engine/mem_exec.ml @@ -193,8 +193,9 @@ module Make output_bases. *) let return_varinfo = Library_functions.get_retres_vi kf in let return_base = Option.map Base.of_varinfo return_varinfo in + let add b = Base.Hptset.add b all_output_bases in let all_output_bases = - Extlib.opt_fold Base.Hptset.add return_base all_output_bases + Option.fold ~some:add ~none:all_output_bases return_base in let clear (key,state) = key, Domain.filter (`Post kf) all_output_bases state diff --git a/src/plugins/eva/engine/transfer_stmt.ml b/src/plugins/eva/engine/transfer_stmt.ml index 09bcb4f40fc..32a76a84692 100644 --- a/src/plugins/eva/engine/transfer_stmt.ml +++ b/src/plugins/eva/engine/transfer_stmt.ml @@ -579,7 +579,8 @@ module Make (Abstract: Abstractions.Eva) = struct >>=: fun (args, valuation) -> let call = create_call stmt kf args in let recursion = Recursion.make call in - let call = Extlib.opt_fold replace_recursive_call recursion call in + let replace a = replace_recursive_call a call in + let call = Option.fold ~some:replace ~none:call recursion in call, recursion, valuation (* ----------------- show_each and dump_each directives ------------------- *) -- GitLab