From 92314417d9a4cdc6928ba5e374e50015ebf6c783 Mon Sep 17 00:00:00 2001
From: Julien Signoles <julien.signoles@cea.fr>
Date: Fri, 1 Mar 2019 15:14:13 +0100
Subject: [PATCH] rename Fixpoint into Interval_system_solver

---
 src/plugins/e-acsl/Makefile.in                |  2 +-
 src/plugins/e-acsl/headers/header_spec.txt    |  4 +-
 src/plugins/e-acsl/interval.ml                | 51 ++++++++++---------
 ...{fixpoint.ml => interval_system_solver.ml} |  0
 ...ixpoint.mli => interval_system_solver.mli} |  0
 5 files changed, 31 insertions(+), 26 deletions(-)
 rename src/plugins/e-acsl/{fixpoint.ml => interval_system_solver.ml} (100%)
 rename src/plugins/e-acsl/{fixpoint.mli => interval_system_solver.mli} (100%)

diff --git a/src/plugins/e-acsl/Makefile.in b/src/plugins/e-acsl/Makefile.in
index c7bfa9ea27a..2ac47809eb4 100644
--- a/src/plugins/e-acsl/Makefile.in
+++ b/src/plugins/e-acsl/Makefile.in
@@ -73,7 +73,7 @@ PLUGIN_CMO:= local_config \
 	env \
 	keep_status \
 	dup_functions \
-	fixpoint \
+	interval_system_solver \
 	interval \
 	typing \
 	loops \
diff --git a/src/plugins/e-acsl/headers/header_spec.txt b/src/plugins/e-acsl/headers/header_spec.txt
index 99ef606045b..dd4e5417bb0 100644
--- a/src/plugins/e-acsl/headers/header_spec.txt
+++ b/src/plugins/e-acsl/headers/header_spec.txt
@@ -21,14 +21,14 @@ error.ml: CEA_LGPL_OR_PROPRIETARY.E_ACSL
 error.mli: CEA_LGPL_OR_PROPRIETARY.E_ACSL
 exit_points.ml: CEA_LGPL_OR_PROPRIETARY.E_ACSL
 exit_points.mli: CEA_LGPL_OR_PROPRIETARY.E_ACSL
-fixpoint.ml: CEA_LGPL_OR_PROPRIETARY.E_ACSL
-fixpoint.mli: CEA_LGPL_OR_PROPRIETARY.E_ACSL
 functions.ml: CEA_LGPL_OR_PROPRIETARY.E_ACSL
 functions.mli: CEA_LGPL_OR_PROPRIETARY.E_ACSL
 gmpz.ml: CEA_LGPL_OR_PROPRIETARY.E_ACSL
 gmpz.mli: CEA_LGPL_OR_PROPRIETARY.E_ACSL
 interval.ml: CEA_LGPL_OR_PROPRIETARY.E_ACSL
 interval.mli: CEA_LGPL_OR_PROPRIETARY.E_ACSL
+interval_system_solver.ml: CEA_LGPL_OR_PROPRIETARY.E_ACSL
+interval_system_solver.mli: CEA_LGPL_OR_PROPRIETARY.E_ACSL
 keep_status.ml: CEA_LGPL_OR_PROPRIETARY.E_ACSL
 keep_status.mli: CEA_LGPL_OR_PROPRIETARY.E_ACSL
 label.ml: CEA_LGPL_OR_PROPRIETARY.E_ACSL
diff --git a/src/plugins/e-acsl/interval.ml b/src/plugins/e-acsl/interval.ml
index 03083cf1602..ea2e4c951f6 100644
--- a/src/plugins/e-acsl/interval.ml
+++ b/src/plugins/e-acsl/interval.ml
@@ -222,25 +222,30 @@ let rec infer t =
           (* 1) Build a system of interval equations that constrain the
                 solution: do so by returning a variable when encoutering a call
                 of a recursive function instead of performing the usual interval
-                inference BEWARE: we might be tempted to memoize the solution
-                for a given function signature HOWEVER: it cannot be done in a
-                straightforward manner due to the cases of functions that use C
-                (global) variables in their definition (as the values of those
-                variables can change between two function calls). *)
-          let ieqs = Fixpoint.Ieqs.empty in
+                inference.
+
+             BEWARE: we might be tempted to memoize the solution for a given
+             function signature HOWEVER: it cannot be done in a straightforward
+             manner due to the cases of functions that use C (global) variables
+             in their definition (as the values of those variables can change
+             between two function calls).
+
+             TODO: I do not understand the remark above. The interval of a C
+             global variable is computed from its type. *)
+          let ieqs = Interval_system_solver.Ieqs.empty in
           let ivar, ieqs, _ = build_ieqs t ieqs [] in
           (*  2) Solve it:
               The problem is probably undecidable in the general case.
               Thus we just look for reasonably precise approximations
               without being too computationally expensive:
               simply iterate over a finite set of pre-defined intervals.
-              See [Fixpoint.solve] for details. *)
+              See [Interval_system_solver.solve] for details. *)
           let chain_of_ivalmax =
             [| Integer.one; Integer.billion_one; Integer.max_int64 |]
             (* This set can be changed based on experimental evidences,
                but it works fine for now. *)
           in
-          Fixpoint.solve ieqs ivar chain_of_ivalmax
+          Interval_system_solver.solve ieqs ivar chain_of_ivalmax
         else begin (* non-recursive case *)
           (* add the arguments to the context *)
           List.iter2
@@ -359,51 +364,51 @@ and build_ieqs t ieqs ivars =
         args
       in
       (* x *)
-      let ivar = Fixpoint.Ivar(li.l_var_info.lv_name, args_lty) in
+      let ivar = Interval_system_solver.Ivar(li.l_var_info.lv_name, args_lty) in
       (* Adding x = g(x) if it is not yet in the system of equations.
         Without this check, the algorithm would not terminate. *)
       let ieqs, ivars =
-        if Fixpoint.ivars_contains_ivar ivars ivar then ieqs, ivars
+        if Interval_system_solver.ivars_contains_ivar ivars ivar then ieqs, ivars
         else
           let iexp, ieqs, ivars =
             build_ieqs (Misc.term_of_li li) ieqs (ivar :: ivars)
           in
-          let ieqs = Fixpoint.Ieqs.add ivar iexp ieqs in (* Adding x = g(x) *)
+          let ieqs = Interval_system_solver.Ieqs.add ivar iexp ieqs in (* Adding x = g(x) *)
           ieqs, ivars
       in
       List.iter (fun lv -> Env.remove lv) li.l_profile;
       ivar, ieqs, ivars
     end else
-      (try Fixpoint.Iconst(infer t), ieqs, ivars
-      with Not_an_integer -> Fixpoint.Iunsupported, ieqs, ivars)
+      (try Interval_system_solver.Iconst(infer t), ieqs, ivars
+      with Not_an_integer -> Interval_system_solver.Iunsupported, ieqs, ivars)
   | TConst _ ->
-    (try Fixpoint.Iconst(infer t), ieqs, ivars
-    with Not_an_integer -> Fixpoint.Iunsupported, ieqs, ivars)
+    (try Interval_system_solver.Iconst(infer t), ieqs, ivars
+    with Not_an_integer -> Interval_system_solver.Iunsupported, ieqs, ivars)
   | TLval(TVar _, _) ->
-    (try Fixpoint.Iconst(infer t), ieqs, ivars
-    with Not_an_integer -> Fixpoint.Iunsupported, ieqs, ivars)
+    (try Interval_system_solver.Iconst(infer t), ieqs, ivars
+    with Not_an_integer -> Interval_system_solver.Iunsupported, ieqs, ivars)
   | TBinOp (PlusA, t1, t2) ->
     let iexp1, ieqs, ivars = build_ieqs t1 ieqs ivars in
     let iexp2, ieqs, ivars = build_ieqs t2 ieqs ivars in
-    Fixpoint.Ibinop(Fixpoint.Ival_add, iexp1, iexp2), ieqs, ivars
+    Interval_system_solver.Ibinop(Interval_system_solver.Ival_add, iexp1, iexp2), ieqs, ivars
   | TBinOp (MinusA, t1, t2) ->
     let iexp1, ieqs, ivars = build_ieqs t1 ieqs ivars in
     let iexp2, ieqs, ivars = build_ieqs t2 ieqs ivars in
-    Fixpoint.Ibinop(Fixpoint.Ival_min, iexp1, iexp2), ieqs, ivars
+    Interval_system_solver.Ibinop(Interval_system_solver.Ival_min, iexp1, iexp2), ieqs, ivars
   | TBinOp (Mult, t1, t2) ->
     let iexp1, ieqs, ivars = build_ieqs t1 ieqs ivars in
     let iexp2, ieqs, ivars = build_ieqs t2 ieqs ivars in
-    Fixpoint.Ibinop(Fixpoint.Ival_mul, iexp1, iexp2), ieqs, ivars
+    Interval_system_solver.Ibinop(Interval_system_solver.Ival_mul, iexp1, iexp2), ieqs, ivars
   | TBinOp (Div, t1, t2) ->
     let iexp1, ieqs, ivars = build_ieqs t1 ieqs ivars in
     let iexp2, ieqs, ivars = build_ieqs t2 ieqs ivars in
-    Fixpoint.Ibinop(Fixpoint.Ival_div, iexp1, iexp2), ieqs, ivars
+    Interval_system_solver.Ibinop(Interval_system_solver.Ival_div, iexp1, iexp2), ieqs, ivars
   | Tif(_, t1, t2) ->
     let iexp1, ieqs, ivars = build_ieqs t1 ieqs ivars in
     let iexp2, ieqs, ivars = build_ieqs t2 ieqs ivars in
-    Fixpoint.Ibinop(Fixpoint.Ival_union, iexp1, iexp2), ieqs, ivars
+    Interval_system_solver.Ibinop(Interval_system_solver.Ival_union, iexp1, iexp2), ieqs, ivars
   | _ ->
-    Fixpoint.Iunsupported, ieqs, ivars
+    Interval_system_solver.Iunsupported, ieqs, ivars
 
 (*
 Local Variables:
diff --git a/src/plugins/e-acsl/fixpoint.ml b/src/plugins/e-acsl/interval_system_solver.ml
similarity index 100%
rename from src/plugins/e-acsl/fixpoint.ml
rename to src/plugins/e-acsl/interval_system_solver.ml
diff --git a/src/plugins/e-acsl/fixpoint.mli b/src/plugins/e-acsl/interval_system_solver.mli
similarity index 100%
rename from src/plugins/e-acsl/fixpoint.mli
rename to src/plugins/e-acsl/interval_system_solver.mli
-- 
GitLab