From bc1a6fc9cacb44317a20c30400ed459b8ddb33de Mon Sep 17 00:00:00 2001 From: "Emmanouil (Manos) Koukoutos" <emmanouil.koukoutos@epfl.ch> Date: Wed, 21 Jan 2015 16:44:59 +0100 Subject: [PATCH] TypeParameterDef.freshen, TypeParameter.freshen --- src/main/scala/leon/purescala/Definitions.scala | 10 +++++++++- src/main/scala/leon/purescala/TypeTrees.scala | 4 +++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/scala/leon/purescala/Definitions.scala b/src/main/scala/leon/purescala/Definitions.scala index c7a72fa21..88cd305ba 100644 --- a/src/main/scala/leon/purescala/Definitions.scala +++ b/src/main/scala/leon/purescala/Definitions.scala @@ -45,7 +45,10 @@ object Definitions { } - /** A ValDef declares a new identifier to be of a certain type. */ + /** + * A ValDef declares a new identifier to be of a certain type. + * When creating a new FunDef, its parameters should obey (id.getType == tp) + */ case class ValDef(id: Identifier, tpe: TypeTree) extends Definition with Typed { self: Serializable => @@ -103,6 +106,7 @@ object Definitions { case class TypeParameterDef(tp: TypeParameter) extends Definition { def subDefinitions = Seq() + def freshen = TypeParameterDef(tp.freshen) val id = tp.id setSubDefOwners() } @@ -460,6 +464,10 @@ object Definitions { def translated(e: Expr): Expr = instantiateType(e, typesMap, paramsMap) + /** + * Params will return ValDefs instantiated with the correct types + * For such a ValDef(id,tp) it may hold that (id.getType != tp) + */ lazy val (params: Seq[ValDef], paramsMap: Map[Identifier, Identifier]) = { if (typesMap.isEmpty) { (fd.params, Map()) diff --git a/src/main/scala/leon/purescala/TypeTrees.scala b/src/main/scala/leon/purescala/TypeTrees.scala index bf448e739..2cc6591ca 100644 --- a/src/main/scala/leon/purescala/TypeTrees.scala +++ b/src/main/scala/leon/purescala/TypeTrees.scala @@ -60,7 +60,9 @@ object TypeTrees { case object UnitType extends TypeTree case object CharType extends TypeTree - case class TypeParameter(id: Identifier) extends TypeTree + case class TypeParameter(id: Identifier) extends TypeTree { + def freshen = TypeParameter(id.freshen) + } case class TupleType(val bases: Seq[TypeTree]) extends TypeTree { lazy val dimension: Int = bases.length -- GitLab