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