From 7d4bcf693fef8ff1fbc28c62d05a083abf6b8512 Mon Sep 17 00:00:00 2001 From: Regis Blanc <regwblanc@gmail.com> Date: Mon, 21 Mar 2016 19:07:23 +0100 Subject: [PATCH] generic prefold with context --- src/main/scala/leon/purescala/SubTreeOps.scala | 15 ++++++++++++++- src/main/scala/leon/purescala/Types.scala | 2 +- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/main/scala/leon/purescala/SubTreeOps.scala b/src/main/scala/leon/purescala/SubTreeOps.scala index 1d96f070b..39ed1a455 100644 --- a/src/main/scala/leon/purescala/SubTreeOps.scala +++ b/src/main/scala/leon/purescala/SubTreeOps.scala @@ -276,6 +276,19 @@ trait SubTreeOps[SubTree <: Tree] { rec(e, c) } + def preFoldWithContext[C](f: (SubTree, C) => C, combiner: (SubTree, C, Seq[C]) => C) + (e: SubTree, c: C): C = { + + def rec(eIn: SubTree, cIn: C): C = { + val ctx = f(eIn, cIn) + val Deconstructor(es, _) = eIn + val cs = es.map{ rec(_, ctx) } + combiner(eIn, ctx, cs) + } + + rec(e, c) + } + /* * ============= * Auxiliary API @@ -322,4 +335,4 @@ trait SubTreeOps[SubTree <: Tree] { res } -} \ No newline at end of file +} diff --git a/src/main/scala/leon/purescala/Types.scala b/src/main/scala/leon/purescala/Types.scala index b461a51c6..0ee936c81 100644 --- a/src/main/scala/leon/purescala/Types.scala +++ b/src/main/scala/leon/purescala/Types.scala @@ -98,7 +98,7 @@ object Types { assert(classDef.tparams.size == tps.size) - def fields = { + lazy val fields = { val tmap = (classDef.tparams zip tps).toMap if (tmap.isEmpty) { classDef.fields -- GitLab