diff --git a/Makefile b/Makefile index 90e779f26d5e8b41b527d0d974ff726fedb5e349..190876cad7c4b5d063752c5b2bc63ee40c67aeff 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 8b4631f0281e2e20569d976524af0fea40929282..715f8361c58345aa08b289ac2e78aec428389735 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 40a333d4f62eaffcb04c379cb0a17d4b9daf48d9..baad021381a46b3905e7a24582131c9f33fa833c 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 10d1ff2e5404069f08ab1be8b998e20e5adc355f..cd627fbe6855a4390136b3cd1228a135511f32a5 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 35b30b376fe483d7977fe7a8790adfcafb84a1f6..5900e0b34895149ecf0947394c6012de7482dce8 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 e2a726634a19d35cb2e54f142c1b6413051aaa06..b8fe5cc895478ba933aa14c7adcfdc9fbb5e4d8f 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 cb375e46dba0a36fbd09762813273405092901a3..9de4af7ecad7656b036d64fb7791d39e8cc273ef 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 23dbe2737ff72675687df8784d1c480bc73b575e..7785c391999cf580cd9d92645b63f9a34d0f93b3 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 f4e5eca4d2ece3976a37912d465f9e7e9a29b538..40864219da9835c8b0ac9da8d505c7662a3f79fc 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 5aa3b559564e90770d9ab4bb02ae22c09c27d128..853545c0c4836b84bb3fddd7c429377db2d93c8b 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 ();;