From 2848b2911740ba56b89ebb3393136fe72520ebac Mon Sep 17 00:00:00 2001 From: Manos Koukoutos <emmanouil.koukoutos@epfl.ch> Date: Tue, 10 May 2016 19:10:12 +0200 Subject: [PATCH] Bug fix etc --- src/main/scala/leon/purescala/ExprOps.scala | 5 ++--- src/main/scala/leon/purescala/Expressions.scala | 4 ++-- src/main/scala/leon/purescala/TypeOps.scala | 2 +- src/main/scala/leon/purescala/Types.scala | 2 +- 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/scala/leon/purescala/ExprOps.scala b/src/main/scala/leon/purescala/ExprOps.scala index 24e54b367..8e778b4d9 100644 --- a/src/main/scala/leon/purescala/ExprOps.scala +++ b/src/main/scala/leon/purescala/ExprOps.scala @@ -427,9 +427,8 @@ object ExprOps extends GenTreeOps[Expr] { // Untuple case Let(id, Tuple(es), b) => - val tps = es map (_.getType) - val ids = tps.zipWithIndex.map { - case (tp, ind) => FreshIdentifier(id + (ind + 1).toString, tp, true) + val ids = es.zipWithIndex.map { case (e, ind) => + FreshIdentifier(id + (ind + 1).toString, e.getType, true) } val theMap: Map[Expr, Expr] = es.zip(ids).zipWithIndex.map { case ((e, subId), ind) => TupleSelect(Variable(id), ind + 1) -> Variable(subId) diff --git a/src/main/scala/leon/purescala/Expressions.scala b/src/main/scala/leon/purescala/Expressions.scala index 6620ebb6a..3b9e396b0 100644 --- a/src/main/scala/leon/purescala/Expressions.scala +++ b/src/main/scala/leon/purescala/Expressions.scala @@ -823,8 +823,8 @@ object Expressions { require(index >= 1) val getType = tuple.getType match { - case TupleType(ts) => - require(index <= ts.size) + case tp@TupleType(ts) => + require(index <= ts.size, s"Got index $index for '$tuple' of type '$tp") ts(index - 1) case _ => diff --git a/src/main/scala/leon/purescala/TypeOps.scala b/src/main/scala/leon/purescala/TypeOps.scala index e43c882c2..ac28c93cb 100644 --- a/src/main/scala/leon/purescala/TypeOps.scala +++ b/src/main/scala/leon/purescala/TypeOps.scala @@ -122,7 +122,7 @@ object TypeOps extends GenTreeOps[TypeTree] { prefix.lastOption - case (TupleType(args1), TupleType(args2)) => + case (TupleType(args1), TupleType(args2)) if args1.size == args2.size => val args = (args1 zip args2).map(p => leastUpperBound(p._1, p._2)) if (args.forall(_.isDefined)) Some(TupleType(args.map(_.get))) else None diff --git a/src/main/scala/leon/purescala/Types.scala b/src/main/scala/leon/purescala/Types.scala index 6518d65fb..f59761913 100644 --- a/src/main/scala/leon/purescala/Types.scala +++ b/src/main/scala/leon/purescala/Types.scala @@ -138,7 +138,7 @@ object Types { def unapply(t: TypeTree): Option[(Seq[TypeTree], Seq[TypeTree] => TypeTree)] = t match { case CaseClassType(ccd, ts) => Some((ts, ts => CaseClassType(ccd, ts))) case AbstractClassType(acd, ts) => Some((ts, ts => AbstractClassType(acd, ts))) - case TupleType(ts) => Some((ts, Constructors.tupleTypeWrap _)) + case TupleType(ts) => Some((ts, TupleType)) case ArrayType(t) => Some((Seq(t), ts => ArrayType(ts.head))) case SetType(t) => Some((Seq(t), ts => SetType(ts.head))) case BagType(t) => Some((Seq(t), ts => BagType(ts.head))) -- GitLab