From 3d6dbaa1e4458b0dba5da13b934380d32615f48d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20B=C3=BChler?= <david.buhler@cea.fr> Date: Mon, 17 Jan 2022 22:24:14 +0100 Subject: [PATCH] [Eva] New Frama-C state Self.state to replace Db.Value.self. --- src/kernel_services/plugin_entry_points/db.ml | 25 ++++++------------- .../plugin_entry_points/db.mli | 2 ++ src/plugins/value/parameters.ml | 5 ++-- src/plugins/value/self.ml | 14 +++++++++++ src/plugins/value/self.mli | 3 +++ 5 files changed, 29 insertions(+), 20 deletions(-) diff --git a/src/kernel_services/plugin_entry_points/db.ml b/src/kernel_services/plugin_entry_points/db.ml index b63abe98dc9..950e5d6150e 100644 --- a/src/kernel_services/plugin_entry_points/db.ml +++ b/src/kernel_services/plugin_entry_points/db.ml @@ -266,14 +266,10 @@ module Value = struct let globals_use_supplied_state () = not (VGlobals.get_option () = None) - (* Do NOT add dependencies to Kernel parameters here, but at the top of - Value/Value_parameters *) - let dependencies = - [ Ast.self; - Alarms.self; - Annotations.code_annot_state; - FunArgs.self; - VGlobals.self ] + let dependencies = [ FunArgs.self; VGlobals.self ] + let proxy = State_builder.Proxy.(create "eva_db" Forward dependencies) + let self = State_builder.Proxy.get proxy + let only_self = [ self ] let size = 256 @@ -285,14 +281,14 @@ module Value = struct (struct let name = "Db.Value.Table_By_Callstack" let size = size - let dependencies = dependencies + let dependencies = [ self ] end) module Table = Cil_state_builder.Stmt_hashtbl(Cvalue.Model) (struct let name = "Db.Value.Table" let size = size - let dependencies = [ Table_By_Callstack.self ] + let dependencies = [ self ] end) (* Clear Value's various caches each time [Db.Value.is_computed] is updated, including when it is set, reset, or during project change. Some operations @@ -308,26 +304,21 @@ module Value = struct Function_Froms.Memory.clear_caches (); ) - module AfterTable_By_Callstack = Cil_state_builder.Stmt_hashtbl(States_by_callstack) (struct let name = "Db.Value.AfterTable_By_Callstack" let size = size - let dependencies = [ Table_By_Callstack.self ] + let dependencies = [ self ] end) module AfterTable = Cil_state_builder.Stmt_hashtbl(Cvalue.Model) (struct let name = "Db.Value.AfterTable" let size = size - let dependencies = [ AfterTable_By_Callstack.self ] + let dependencies = [ self ] end) - - let self = Table_By_Callstack.self - let only_self = [ self ] - let mark_as_computed = Journal.register "Db.Value.mark_as_computed" (Datatype.func Datatype.unit Datatype.unit) diff --git a/src/kernel_services/plugin_entry_points/db.mli b/src/kernel_services/plugin_entry_points/db.mli index 636ec1d8bd5..d944d48b154 100644 --- a/src/kernel_services/plugin_entry_points/db.mli +++ b/src/kernel_services/plugin_entry_points/db.mli @@ -129,6 +129,8 @@ module Value : sig val emitter: Emitter.t ref (** Emitter used by Value to emit statuses *) + val proxy: State_builder.Proxy.t + val self : State.t (** Internal state of the value analysis from projects viewpoint. @plugin development guide *) diff --git a/src/plugins/value/parameters.ml b/src/plugins/value/parameters.ml index 0b994b78bd7..c03116c950d 100644 --- a/src/plugins/value/parameters.ml +++ b/src/plugins/value/parameters.ml @@ -45,9 +45,8 @@ let kernel_parameters_correctness = [ let parameters_correctness = ref Typed_parameter.Set.empty let parameters_tuning = ref Typed_parameter.Set.empty let add_dep p = - State_dependency_graph.add_codependencies - ~onto:Db.Value.self - [State.get p.Typed_parameter.name] + let state = State.get p.Typed_parameter.name in + State_builder.Proxy.extend [state] Self.proxy let add_correctness_dep p = if Typed_parameter.Set.mem p !parameters_correctness then Kernel.abort "adding correctness parameter %a twice" diff --git a/src/plugins/value/self.ml b/src/plugins/value/self.ml index 69af425301a..660ac61d9a5 100644 --- a/src/plugins/value/self.ml +++ b/src/plugins/value/self.ml @@ -28,6 +28,20 @@ include Plugin.Register "automatically computes variation domains for the variables of the program" end) +(* Do not add dependencies to Kernel parameters here, but at the top of + Parameters. *) +let kernel_dependencies = + [ Ast.self; + Alarms.self; + Annotations.code_annot_state; ] + +let dependencies = Db.Value.self :: kernel_dependencies + +let proxy = State_builder.Proxy.(create "eva" Forward dependencies) +let state = State_builder.Proxy.get proxy + +let () = State_builder.Proxy.extend [state] Db.Value.proxy + let () = Help.add_aliases ~visible:false [ "-value-h"; "-val-h" ] let () = add_plugin_output_aliases ~visible:false ~deprecated:true [ "value" ] diff --git a/src/plugins/value/self.mli b/src/plugins/value/self.mli index 94cd9910a27..cd4de22ea76 100644 --- a/src/plugins/value/self.mli +++ b/src/plugins/value/self.mli @@ -22,6 +22,9 @@ include Plugin.General_services +val proxy: State_builder.Proxy.t +val state: State.t + (** Debug categories responsible for printing initial and final states of Value. Enabled by default, but can be disabled via the command-line: -value-msg-key="-initial_state,-final_state" *) -- GitLab