diff --git a/src/main/scala/leon/purescala/TypeTrees.scala b/src/main/scala/leon/purescala/TypeTrees.scala index feb400baf7f4a71a5fc51ab050b17b5ce5662c39..91d597535a1e12348f1a3634905da38851b4b8d9 100644 --- a/src/main/scala/leon/purescala/TypeTrees.scala +++ b/src/main/scala/leon/purescala/TypeTrees.scala @@ -166,8 +166,32 @@ object TypeTrees { case object Int32Type extends TypeTree case object UnitType extends TypeTree + class TupleType private (val bases: Seq[TypeTree]) extends TypeTree { + lazy val dimension: Int = bases.length + + override def equals(other: Any): Boolean = { + other match { + case (t: TupleType) => t.bases == bases + case _ => false + } + } + + override def hashCode: Int = { + bases.foldLeft(42)((acc, t) => acc + t.hashCode) + } + + } + object TupleType { + def apply(bases: Seq[TypeTree]): TupleType = { + new TupleType(bases.map(bestRealType(_))) + } + def unapply(expr: TupleType): Option[Seq[TypeTree]] = expr match { + case (t: TupleType) => Some(t.bases) + case _ => None + } + } + case class ListType(base: TypeTree) extends TypeTree - case class TupleType(bases: Seq[TypeTree]) extends TypeTree { lazy val dimension: Int = bases.length } case class SetType(base: TypeTree) extends TypeTree case class MultisetType(base: TypeTree) extends TypeTree case class MapType(from: TypeTree, to: TypeTree) extends TypeTree