From 161be27f422e2c6d1970018486f127a5a5704ca1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9gis=20Blanc?= <regwblanc@gmail.com> Date: Fri, 15 Apr 2016 02:16:57 +0200 Subject: [PATCH] use preMapWithContext to implement preMap --- .../scala/leon/purescala/GenTreeOps.scala | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/src/main/scala/leon/purescala/GenTreeOps.scala b/src/main/scala/leon/purescala/GenTreeOps.scala index 2b9f1fcc5..08404ae15 100644 --- a/src/main/scala/leon/purescala/GenTreeOps.scala +++ b/src/main/scala/leon/purescala/GenTreeOps.scala @@ -133,23 +133,8 @@ trait GenTreeOps[SubTree <: Tree] { * @note The mode with applyRec true can diverge if f is not well formed */ def preMap(f: SubTree => Option[SubTree], applyRec : Boolean = false)(e: SubTree): SubTree = { - val rec = preMap(f, applyRec) _ - - val newV = if (applyRec) { - // Apply f as long as it returns Some() - fixpoint { e : SubTree => f(e) getOrElse e } (e) - } else { - f(e) getOrElse e - } - - val Deconstructor(es, builder) = newV - val newEs = es.map(rec) - - if ((newEs zip es).exists { case (bef, aft) => aft ne bef }) { - builder(newEs).copiedFrom(newV) - } else { - newV - } + def g(t: SubTree, u: Unit): (Option[SubTree], Unit) = (f(t), ()) + preMapWithContext[Unit](g, applyRec)(e, ()) } -- GitLab