From 8f743372a4ce430a381c5492fabf3cb3b439c2dc Mon Sep 17 00:00:00 2001
From: Etienne Kneuss <ekneuss@gmail.com>
Date: Thu, 17 Sep 2015 17:05:59 +0200
Subject: [PATCH] Substitute types in synthesis holes

---
 src/main/scala/leon/purescala/TypeOps.scala       |  3 +++
 .../scala/leon/unit/purescala/TypeOpsSuite.scala  | 15 +++++++++++++++
 2 files changed, 18 insertions(+)

diff --git a/src/main/scala/leon/purescala/TypeOps.scala b/src/main/scala/leon/purescala/TypeOps.scala
index f64c05219..4b458b5d8 100644
--- a/src/main/scala/leon/purescala/TypeOps.scala
+++ b/src/main/scala/leon/purescala/TypeOps.scala
@@ -319,6 +319,9 @@ object TypeOps {
           case Error(tpe, desc) =>
             Error(tpeSub(tpe), desc).copiedFrom(e)
           
+          case Hole(tpe, alts) =>
+            Hole(tpeSub(tpe), alts.map(srec)).copiedFrom(e)
+
           case g @ GenericValue(tpar, id) =>
             tpeSub(tpar) match {
               case newTpar : TypeParameter => 
diff --git a/src/test/scala/leon/unit/purescala/TypeOpsSuite.scala b/src/test/scala/leon/unit/purescala/TypeOpsSuite.scala
index 57f37ed34..c7ce03cf7 100644
--- a/src/test/scala/leon/unit/purescala/TypeOpsSuite.scala
+++ b/src/test/scala/leon/unit/purescala/TypeOpsSuite.scala
@@ -61,4 +61,19 @@ class TypeOpsSuite extends LeonTestSuite with helpers.WithLikelyEq with helpers.
     assert(isSubtypeOf(listD.typed, listD.typed), "List[T] <: List[T]")
   }
 
+  test("instantiateType Hole") { ctx =>
+    val tp1 = TypeParameter.fresh("a")
+    val tp2 = TypeParameter.fresh("b")
+
+    val tpd = TypeParameterDef(tp1)
+
+    val e1 = Hole(tp1, Nil)
+    val e2 = instantiateType(e1, Map(tpd -> tp2), Map())
+
+    e2 match {
+      case Hole(tp, _) => assert(tp == tp2, "Type should have been substituted")
+      case _ => fail("Incorrect expr shape, should be a Hole")
+    }
+  }
+
 }
-- 
GitLab