From d318d306dc7af94d00b4cb22d34fbda55a692ef2 Mon Sep 17 00:00:00 2001
From: Regis Blanc <regwblanc@gmail.com>
Date: Tue, 21 Jul 2015 16:45:31 +0200
Subject: [PATCH] fixpoint should not be in ExprOps

---
 src/main/scala/leon/purescala/ExprOps.scala | 15 +----------
 src/main/scala/leon/utils/GraphOps.scala    |  2 +-
 src/main/scala/leon/utils/package.scala     | 28 +++++++++++++++++++++
 3 files changed, 30 insertions(+), 15 deletions(-)
 create mode 100644 src/main/scala/leon/utils/package.scala

diff --git a/src/main/scala/leon/purescala/ExprOps.scala b/src/main/scala/leon/purescala/ExprOps.scala
index a63cf2cdc..0be34a227 100644
--- a/src/main/scala/leon/purescala/ExprOps.scala
+++ b/src/main/scala/leon/purescala/ExprOps.scala
@@ -9,7 +9,7 @@ import Definitions._
 import Expressions._
 import Extractors._
 import Constructors._
-import utils.Simplifiers
+import utils._
 import solvers._
 
 /** Provides functions to manipulate [[purescala.Expressions]].
@@ -189,19 +189,6 @@ object ExprOps {
 
   }
 
-  def fixpoint[T](f: T => T, limit: Int = -1)(e: T): T = {
-    var v1 = e
-    var v2 = f(v1)
-    var lim = limit
-    while(v2 != v1 && lim != 0) {
-      v1 = v2
-      lim -= 1
-      v2 = f(v2)
-    }
-    v2
-  }
-
-
   /*
    * =============
    * Auxiliary API
diff --git a/src/main/scala/leon/utils/GraphOps.scala b/src/main/scala/leon/utils/GraphOps.scala
index 012abda64..3fede60e6 100644
--- a/src/main/scala/leon/utils/GraphOps.scala
+++ b/src/main/scala/leon/utils/GraphOps.scala
@@ -32,7 +32,7 @@ object GraphOps {
         graph.getOrElse(v, Set())
       }))
     }
-    leon.purescala.ExprOps.fixpoint(step, -1)(graph)
+    fixpoint(step, -1)(graph)
   }
   
   def sources[A](graph : Map[A,Set[A]]) = {
diff --git a/src/main/scala/leon/utils/package.scala b/src/main/scala/leon/utils/package.scala
new file mode 100644
index 000000000..2599fd069
--- /dev/null
+++ b/src/main/scala/leon/utils/package.scala
@@ -0,0 +1,28 @@
+package leon
+
+/** Various utilities used throughout the Leon system */
+package object utils {
+
+  /** compute the fixpoint of a function.
+    *
+    * Apply the input function on an expression as long as until 
+    * it stays the same (value equality) or until a set limit.
+    *
+    * @param f
+    * @param limit
+    * @param e
+    * @return
+    */
+  def fixpoint[T](f: T => T, limit: Int = -1)(e: T): T = {
+    var v1 = e
+    var v2 = f(v1)
+    var lim = limit
+    while(v2 != v1 && lim != 0) {
+      v1 = v2
+      lim -= 1
+      v2 = f(v2)
+    }
+    v2
+  }
+  
+}
-- 
GitLab