From d97744fa0b910f5dfca338cc661208279677af47 Mon Sep 17 00:00:00 2001
From: Etienne Kneuss <ekneuss@gmail.com>
Date: Thu, 16 Apr 2015 17:30:01 +0200
Subject: [PATCH] Global caches are considered harmful

---
 src/main/scala/leon/purescala/ExprOps.scala | 49 ++++++---------------
 1 file changed, 13 insertions(+), 36 deletions(-)

diff --git a/src/main/scala/leon/purescala/ExprOps.scala b/src/main/scala/leon/purescala/ExprOps.scala
index 901a6810d..566a50e21 100644
--- a/src/main/scala/leon/purescala/ExprOps.scala
+++ b/src/main/scala/leon/purescala/ExprOps.scala
@@ -669,21 +669,6 @@ object ExprOps {
     rec(expr, Map.empty)
   }
 
-  /** Rewrites all pattern-matching expressions into if-then-else expressions,
-   * with additional error conditions. Does not introduce additional variables.
-   */
-  val cacheMtITE = new TrieMap[Expr, Expr]()
-
-  def matchToIfThenElse(expr: Expr) : Expr = {
-    cacheMtITE.get(expr) match {
-      case Some(res) =>
-        res
-      case None =>
-        val r = convertMatchToIfThenElse(expr)
-        cacheMtITE += expr -> r
-        r
-    }
-  }
 
   /**
    * Generates substitutions necessary to transform scrutinee to equivalent
@@ -835,8 +820,11 @@ object ExprOps {
     case LiteralPattern(None, lit) => Map()
     case LiteralPattern(Some(id), lit) => Map(id -> in)
   }
-  
-  private def convertMatchToIfThenElse(expr: Expr): Expr = {
+
+  /** Rewrites all pattern-matching expressions into if-then-else expressions,
+   * with additional error conditions. Does not introduce additional variables.
+   */
+  def matchToIfThenElse(expr: Expr): Expr = {
 
     def rewritePM(e: Expr): Option[Expr] = e match {
       case m @ MatchExpr(scrut, cases) =>
@@ -966,26 +954,15 @@ object ExprOps {
   /**
    * Rewrites all map accesses with additional error conditions.
    */
-  val cacheMGWC = new TrieMap[Expr, Expr]()
-
-  def mapGetWithChecks(expr: Expr) : Expr = {
-    cacheMGWC.get(expr) match {
-      case Some(res) =>
-        res
-      case None =>
-
-        val r = postMap({
-          case mg @ MapGet(m,k) =>
-            val ida = MapIsDefinedAt(m, k)
-            Some(IfExpr(ida, mg, Error(mg.getType, "Key not found for map access").copiedFrom(mg)).copiedFrom(mg))
-
-          case _=>
-            None
-        })(expr)
+  def mapGetWithChecks(expr: Expr): Expr = {
+    postMap({
+      case mg @ MapGet(m,k) =>
+        val ida = MapIsDefinedAt(m, k)
+        Some(IfExpr(ida, mg, Error(mg.getType, "Key not found for map access").copiedFrom(mg)).copiedFrom(mg))
 
-        cacheMGWC += expr -> r
-        r
-    }
+      case _=>
+        None
+    })(expr)
   }
 
   /**
-- 
GitLab