From 6ca663fe92cc2c7db07312403267e670d2dad144 Mon Sep 17 00:00:00 2001 From: Etienne Kneuss <ekneuss@gmail.com> Date: Tue, 30 Oct 2012 03:54:10 +0100 Subject: [PATCH] Nasty Nary extractor for MatchExpr --- src/main/scala/leon/purescala/Extractors.scala | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/main/scala/leon/purescala/Extractors.scala b/src/main/scala/leon/purescala/Extractors.scala index 57b108ddb..94eb5fba0 100644 --- a/src/main/scala/leon/purescala/Extractors.scala +++ b/src/main/scala/leon/purescala/Extractors.scala @@ -101,6 +101,18 @@ object Extractors { case Block(args, rest) => Some((args :+ rest, exprs => Block(exprs.init, exprs.last))) case Tuple(args) => Some((args, Tuple)) case IfExpr(cond, then, elze) => Some((Seq(cond, then, elze), (as: Seq[Expr]) => IfExpr(as(0), as(1), as(2)))) + case MatchExpr(scrut, cases) => + Some((scrut +: cases.flatMap{ case SimpleCase(_, e) => Seq(e) + case GuardedCase(_, e1, e2) => Seq(e1, e2) } + , { es: Seq[Expr] => + var i = 1; + val newcases = for (caze <- cases) yield caze match { + case SimpleCase(b, _) => i+=1; SimpleCase(b, es(i-1)) + case GuardedCase(b, _, _) => i+=2; GuardedCase(b, es(i-2), es(i-1)) + } + + MatchExpr(es(0), newcases) + })) case ex: NAryExtractable => ex.extract case _ => None } -- GitLab