Skip to content
Snippets Groups Projects
Commit 5f0ee7d5 authored by Emmanouil (Manos) Koukoutos's avatar Emmanouil (Manos) Koukoutos Committed by Etienne Kneuss
Browse files

Make sure Generic values get updated according to expected type in some cases

parent 84ad2a2b
No related branches found
No related tags found
No related merge requests found
...@@ -213,8 +213,9 @@ class CompilationUnit(val ctx: LeonContext, ...@@ -213,8 +213,9 @@ class CompilationUnit(val ctx: LeonContext,
} }
Tuple(elems) Tuple(elems)
case (gv : GenericValue, _: TypeParameter) => case (gv @ GenericValue(gtp, id), tp: TypeParameter) =>
gv if (gtp == tp) gv
else GenericValue(tp, id).copiedFrom(gv)
case (set : runtime.Set, SetType(b)) => case (set : runtime.Set, SetType(b)) =>
FiniteSet(set.getElements().asScala.map(jvmToExpr(_, b)).toSet).setType(SetType(b)) FiniteSet(set.getElements().asScala.map(jvmToExpr(_, b)).toSet).setType(SetType(b))
......
...@@ -302,6 +302,14 @@ object TypeTreeOps { ...@@ -302,6 +302,14 @@ object TypeTreeOps {
case Error(tpe, desc) => case Error(tpe, desc) =>
Error(tpeSub(tpe), desc).copiedFrom(e) Error(tpeSub(tpe), desc).copiedFrom(e)
case g @ GenericValue(tpar, id) =>
tpeSub(tpar) match {
case newTpar : TypeParameter =>
GenericValue(newTpar, id).copiedFrom(g)
case other => // FIXME any better ideas?
sys.error(s"Tried to substitute $tpar with $other within GenericValue $g")
}
case ens @ Ensuring(body, id, pred) => case ens @ Ensuring(body, id, pred) =>
val newId = freshId(id, tpeSub(id.getType)) val newId = freshId(id, tpeSub(id.getType))
Ensuring(srec(body), newId, rec(idsMap + (id -> newId))(pred)).copiedFrom(ens) Ensuring(srec(body), newId, rec(idsMap + (id -> newId))(pred)).copiedFrom(ens)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment