From 3ecd4e98899c0ca52ae5102fbfb1ed751fd95adf Mon Sep 17 00:00:00 2001
From: Manos Koukoutos <emmanouil.koukoutos@epfl.ch>
Date: Thu, 10 Sep 2015 13:36:10 +0200
Subject: [PATCH] req Constructor

---
 src/main/scala/leon/purescala/Constructors.scala | 5 +++++
 src/main/scala/leon/purescala/ExprOps.scala      | 4 ++--
 2 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/src/main/scala/leon/purescala/Constructors.scala b/src/main/scala/leon/purescala/Constructors.scala
index 22697b7df..9d347eccf 100644
--- a/src/main/scala/leon/purescala/Constructors.scala
+++ b/src/main/scala/leon/purescala/Constructors.scala
@@ -394,7 +394,12 @@ object Constructors {
     } else {
       IsInstanceOf(expr, tpe)
     }
+  }
 
+  def req(pred: Expr, body: Expr) = pred match {
+    case BooleanLiteral(true)  => body
+    case BooleanLiteral(false) => Error(body.getType, "Precondition failed")
+    case _ => Require(pred, body)
   }
 
 }
diff --git a/src/main/scala/leon/purescala/ExprOps.scala b/src/main/scala/leon/purescala/ExprOps.scala
index 91d36d7a9..484b468ba 100644
--- a/src/main/scala/leon/purescala/ExprOps.scala
+++ b/src/main/scala/leon/purescala/ExprOps.scala
@@ -1741,10 +1741,10 @@ object ExprOps {
     * @see [[Expressions.Require]]
     */
   def withPrecondition(expr: Expr, pred: Option[Expr]): Expr = (pred, expr) match {
-    case (Some(newPre), Require(pre, b))              => Require(newPre, b)
+    case (Some(newPre), Require(pre, b))              => req(newPre, b)
     case (Some(newPre), Ensuring(Require(pre, b), p)) => Ensuring(Require(newPre, b), p)
     case (Some(newPre), Ensuring(b, p))               => Ensuring(Require(newPre, b), p)
-    case (Some(newPre), b)                            => Require(newPre, b)
+    case (Some(newPre), b)                            => req(newPre, b)
     case (None, Require(pre, b))                      => b
     case (None, Ensuring(Require(pre, b), p))         => Ensuring(b, p)
     case (None, b)                                    => b
-- 
GitLab