From 759170bbc27f1c9d2bd69b8b618227ce055db7ec Mon Sep 17 00:00:00 2001
From: Manos Koukoutos <emmanouil.koukoutos@epfl.ch>
Date: Tue, 8 Sep 2015 18:53:42 +0200
Subject: [PATCH] Instantiate type before substituting args when inlining

---
 src/main/scala/leon/purescala/TypeOps.scala   | 2 +-
 src/main/scala/leon/utils/InliningPhase.scala | 4 ++--
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/src/main/scala/leon/purescala/TypeOps.scala b/src/main/scala/leon/purescala/TypeOps.scala
index 5c68340e6..0e7493018 100644
--- a/src/main/scala/leon/purescala/TypeOps.scala
+++ b/src/main/scala/leon/purescala/TypeOps.scala
@@ -260,7 +260,7 @@ object TypeOps {
               (LiteralPattern(newOb,lit), (ob zip newOb).toMap)
 
             case _ =>
-              sys.error("woot!?")
+              sys.error(s"woot!? $p:$expType")
           }
 
           (srec(e), cases.map(trCase))//.copiedFrom(m)
diff --git a/src/main/scala/leon/utils/InliningPhase.scala b/src/main/scala/leon/utils/InliningPhase.scala
index dea267601..cc2862c76 100644
--- a/src/main/scala/leon/utils/InliningPhase.scala
+++ b/src/main/scala/leon/utils/InliningPhase.scala
@@ -40,8 +40,8 @@ object InliningPhase extends TransformationPhase {
     for (fd <- p.definedFunctions) {
       fd.fullBody = simplify(preMap {
         case FunctionInvocation(TypedFunDef(fd, tps), args) if doInline(fd) =>
-          val newBody = replaceFromIDs(fd.params.map(_.id).zip(args).toMap, fd.fullBody)
-          Some(instantiateType(newBody, (fd.tparams zip tps).toMap, Map()))
+          val newBody = instantiateType(fd.fullBody, (fd.tparams zip tps).toMap, Map())
+          Some(replaceFromIDs(fd.params.map(_.id).zip(args).toMap, newBody))
         case _ =>
           None
       }(fd.fullBody))
-- 
GitLab