From 94951aa21657970d69760888d5e1ebc46b7fd5b0 Mon Sep 17 00:00:00 2001
From: Marc Coudriau <marc.coudriau@ens.fr>
Date: Fri, 5 Jul 2019 17:30:45 +0200
Subject: [PATCH] [sparecode] removing Db API from sparecode

---
 Makefile                                      |  2 +-
 doc/training/developer/project.tex            |  4 ++--
 src/kernel_services/plugin_entry_points/db.ml | 12 ------------
 .../plugin_entry_points/db.mli                | 18 ------------------
 src/plugins/slicing/slicingTransform.ml       |  2 +-
 src/plugins/sparecode/Sparecode.mli           | 19 +++++++++++++++++--
 src/plugins/sparecode/register.ml             | 14 +++-----------
 tests/journal/intra.ml                        |  2 +-
 tests/saveload/load_one.ml                    |  2 +-
 tests/slicing/combine.ml                      |  2 +-
 10 files changed, 27 insertions(+), 50 deletions(-)

diff --git a/Makefile b/Makefile
index 90e779f26d5..190876cad7c 100644
--- a/Makefile
+++ b/Makefile
@@ -1162,7 +1162,7 @@ PLUGIN_TESTS_LIB:= tests/slicing/libSelect.ml tests/slicing/libAnim.ml \
 	tests/slicing/adpcm.ml
 PLUGIN_DISTRIBUTED:=yes
 PLUGIN_INTERNAL_TEST:=yes
-PLUGIN_DEPENDENCIES:=Pdg Callgraph Eva
+PLUGIN_DEPENDENCIES:=Pdg Callgraph Eva Sparecode
 
 $(eval $(call include_generic_plugin_Makefile,$(PLUGIN_NAME)))
 
diff --git a/doc/training/developer/project.tex b/doc/training/developer/project.tex
index 8b4631f0281..715f8361c58 100644
--- a/doc/training/developer/project.tex
+++ b/doc/training/developer/project.tex
@@ -170,8 +170,8 @@ end
   \item  \lstinline+Project.set_current+, \lstinline+Project.on+
 \begin{ocamlcode}
 let main () =
-  let p = 
-    !Db.Sparecode.get
+  let p =
+    Sparecode.Register.get
       ~select_annot:false
       ~select_slice_pragma:false
    in
diff --git a/src/kernel_services/plugin_entry_points/db.ml b/src/kernel_services/plugin_entry_points/db.ml
index 40a333d4f62..baad021381a 100644
--- a/src/kernel_services/plugin_entry_points/db.ml
+++ b/src/kernel_services/plugin_entry_points/db.ml
@@ -824,18 +824,6 @@ module Pdg = struct
 
 end
 
-(* ************************************************************************* *)
-(** {2 Spare Code} *)
-(* ************************************************************************* *)
-
-(** Detection of the unused code of an application. *)
-module Sparecode = struct
-  let get =
-    ref (fun ~select_annot:_  -> mk_labeled_fun "Sparecode.run")
-  let rm_unused_globals =
-    ref (fun ?new_proj_name:_ -> mk_labeled_fun "Sparecode.rm_unused_globals")
-end
-
 (* ************************************************************************* *)
 (** {2 Properties} *)
 (* ************************************************************************* *)
diff --git a/src/kernel_services/plugin_entry_points/db.mli b/src/kernel_services/plugin_entry_points/db.mli
index 10d1ff2e540..cd627fbe685 100644
--- a/src/kernel_services/plugin_entry_points/db.mli
+++ b/src/kernel_services/plugin_entry_points/db.mli
@@ -1240,24 +1240,6 @@ module Pdg : sig
 end
 
 
-(** Interface for the unused code detection.
-    @see <../sparecode/index.html> internal documentation. *)
-module Sparecode : sig
-  val get: (select_annot:bool -> select_slice_pragma:bool -> Project.t) ref
-     (** Remove in each function what isn't used to compute its outputs,
-      *   or its annotations when [select_annot] is true,
-      *   or its slicing pragmas when [select_slice_pragmas] is true.
-      *  @return a new project where the sparecode has been removed.
-      *)
-  val rm_unused_globals : (?new_proj_name:string -> ?project:Project.t -> unit -> Project.t) ref
-    (** Remove  unused global types and variables from the given project
-      * (the current one if no project given).
-      * The source project is not modified.
-      * The result is in the returned new project.
-      * @modify Carbon-20110201 optional argument [new_proj_name] added
-      * *)
-end
-
 (** Signature common to some Inout plugin options. The results of
     the computations are available on a per function basis. *)
 module type INOUTKF = sig
diff --git a/src/plugins/slicing/slicingTransform.ml b/src/plugins/slicing/slicingTransform.ml
index 35b30b376fe..5900e0b3489 100644
--- a/src/plugins/slicing/slicingTransform.ml
+++ b/src/plugins/slicing/slicingTransform.ml
@@ -472,7 +472,7 @@ let extract ~f_slice_names new_proj_name =
     Transform.build_cil_file (new_proj_name ^ " tmp") ()
   in
   let new_prj =
-    !Db.Sparecode.rm_unused_globals ~new_proj_name ~project:tmp_prj ()
+    Sparecode.Register.rm_unused_globals ~new_proj_name ~project:tmp_prj ()
   in
   Project.remove ~project:tmp_prj ();
   let ctx = Parameter_state.get_selection_context () in
diff --git a/src/plugins/sparecode/Sparecode.mli b/src/plugins/sparecode/Sparecode.mli
index e2a726634a1..b8fe5cc8954 100644
--- a/src/plugins/sparecode/Sparecode.mli
+++ b/src/plugins/sparecode/Sparecode.mli
@@ -21,6 +21,21 @@
 (**************************************************************************)
 
 (** Sparecode analysis. *)
+(** Interface for the unused code detection.
+    @see <../sparecode/index.html> internal documentation. *)
 
-(** No function is directly exported:
-    they are registered in !Db.Sparecode. *)
+module Register: sig
+  val get: select_annot:bool -> select_slice_pragma:bool -> Project.t
+     (** Remove in each function what isn't used to compute its outputs,
+      *   or its annotations when [select_annot] is true,
+      *   or its slicing pragmas when [select_slice_pragmas] is true.
+      *  @return a new project where the sparecode has been removed.
+      *)
+  val rm_unused_globals : ?new_proj_name:string -> ?project:Project.t -> unit -> Project.t
+    (** Remove  unused global types and variables from the given project
+      * (the current one if no project given).
+      * The source project is not modified.
+      * The result is in the returned new project.
+      * @modify Carbon-20110201 optional argument [new_proj_name] added
+      * *)
+end
diff --git a/src/plugins/sparecode/register.ml b/src/plugins/sparecode/register.ml
index cb375e46dba..9de4af7ecad 100644
--- a/src/plugins/sparecode/register.ml
+++ b/src/plugins/sparecode/register.ml
@@ -57,7 +57,7 @@ let unjournalized_rm_unused_globals new_proj_name project =
 
 let journalized_rm_unused_globals  =
   Journal.register
-    "!Db.Sparecode.rm_unused_globals"
+    "Sparecode.Register.rm_unused_globals"
     (Datatype.func2
        ~label1:("new_proj_name", None) Datatype.string
        ~label2:("project", Some Project.current) Project.ty
@@ -95,7 +95,7 @@ let run select_annot select_slice_pragma =
 
 let journalized_get =
   Journal.register
-    "!Db.Sparecode.get"
+    "Sparecode.Register.get"
     (Datatype.func2
        ~label1:("select_annot", None) Datatype.bool
        ~label2:("select_slice_pragma", None) Datatype.bool
@@ -109,19 +109,11 @@ let journalized_get =
 let get ~select_annot ~select_slice_pragma =
   journalized_get select_annot select_slice_pragma
 
-(** {2 Initialization of the sparecode plugin } *)
-
-let () =
-  (* journalization already done. *)
-  Db.register Db.Journalization_not_required Db.Sparecode.get get;
-  Db.register Db.Journalization_not_required
-    Db.Sparecode.rm_unused_globals rm_unused_globals
-
 let main () =
   if Sparecode_params.Analysis.get () then begin
     let select_annot = Sparecode_params.Annot.get () in
     let select_slice_pragma = true in
-    let new_proj = !Db.Sparecode.get select_annot select_slice_pragma in
+    let new_proj = get select_annot select_slice_pragma in
     File.pretty_ast ~prj:new_proj ()
   end
   else if Sparecode_params.GlobDecl.get () then begin
diff --git a/tests/journal/intra.ml b/tests/journal/intra.ml
index 23dbe2737ff..7785c391999 100644
--- a/tests/journal/intra.ml
+++ b/tests/journal/intra.ml
@@ -1 +1 @@
-let () = Db.Main.extend (fun _ -> ignore (!Db.Sparecode.get true true))
+let () = Db.Main.extend (fun _ -> ignore (Sparecode.Register.get true true))
diff --git a/tests/saveload/load_one.ml b/tests/saveload/load_one.ml
index f4e5eca4d2e..40864219da9 100644
--- a/tests/saveload/load_one.ml
+++ b/tests/saveload/load_one.ml
@@ -2,7 +2,7 @@ let () = at_exit (fun _ -> Sys.remove "tests/saveload/result/load_one.sav")
 
 let main () =
   let sparecode () =
-    !Db.Sparecode.get ~select_annot:false ~select_slice_pragma:false
+    Sparecode.Register.get ~select_annot:false ~select_slice_pragma:false
   in
   let p = sparecode () in
   Project.save "tests/saveload/result/load_one.sav";
diff --git a/tests/slicing/combine.ml b/tests/slicing/combine.ml
index 5aa3b559564..853545c0c48 100644
--- a/tests/slicing/combine.ml
+++ b/tests/slicing/combine.ml
@@ -71,7 +71,7 @@ let main _ =
   Format.printf "After Constant propagation :@.";
   File.pretty_ast ~prj:proj3 ();
 
-  let proj4 = !Db.Sparecode.get ~select_annot:true ~select_slice_pragma:true in
+  let proj4 = Sparecode.Register.get ~select_annot:true ~select_slice_pragma:true in
   Format.printf "After Sparecode :@.";
   File.pretty_ast ~prj:proj4 ();;
 
-- 
GitLab