From 8f488a11114e123dac68433df064decfc6baf541 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9gis=20Blanc?= <regwblanc@gmail.com>
Date: Fri, 4 May 2012 05:52:52 +0000
Subject: [PATCH] fix bug in testcase and support the complete language in
 ArrayTransformation

---
 src/main/scala/leon/ArrayTransformation.scala | 18 ++++++++++++++++--
 testcases/regression/valid/Array4.scala       | 12 ++++++++++--
 2 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/src/main/scala/leon/ArrayTransformation.scala b/src/main/scala/leon/ArrayTransformation.scala
index a61605287..d25965ede 100644
--- a/src/main/scala/leon/ArrayTransformation.scala
+++ b/src/main/scala/leon/ArrayTransformation.scala
@@ -116,9 +116,23 @@ object ArrayTransformation extends Pass {
       LetVar(id, er, br)
     }
 
-    //case ite@IfExpr(cond, tExpr, eExpr) => 
+    case ite@IfExpr(c, t, e) => {
+      val rc = transform(c)
+      val rt = transform(t)
+      val re = transform(e)
+      IfExpr(rc, rt, re).setType(rt.getType)
+    }
+
+    case m @ MatchExpr(scrut, cses) => {
+      val scrutRec = transform(scrut)
+      val csesRec = cses.map{
+        case SimpleCase(pat, rhs) => SimpleCase(pat, transform(rhs))
+        case GuardedCase(pat, guard, rhs) => GuardedCase(pat, transform(guard), transform(rhs))
+      }
+      val tpe = csesRec.head.rhs.getType
+      MatchExpr(scrutRec, csesRec).setType(tpe).setPosInfo(m)
+    }
 
-    //case m @ MatchExpr(scrut, cses) => 
     //case LetDef(fd, b) => 
 
     case n @ NAryOperator(args, recons) => recons(args.map(transform)).setType(n.getType)
diff --git a/testcases/regression/valid/Array4.scala b/testcases/regression/valid/Array4.scala
index 479f243ba..fd76e02fa 100644
--- a/testcases/regression/valid/Array4.scala
+++ b/testcases/regression/valid/Array4.scala
@@ -1,7 +1,15 @@
+import leon.Utils._
+
 object Array4 {
 
   def foo(a: Array[Int]): Int = {
-    a(2)
-  } ensuring(_ == 3)
+    var i = 0
+    var sum = 0
+    (while(i < a.length) {
+      sum = sum + a(i)
+      i = i + 1
+    }) invariant(i >= 0)
+    sum
+  }
 
 }
-- 
GitLab