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