Skip to content

Commit 7e72d94

Browse files
authored
Merge pull request #154 from jad-hamza/tuple-caching
Use tuple caching logic in declareDatatypes
2 parents c908e75 + e686233 commit 7e72d94

File tree

1 file changed

+10
-6
lines changed

1 file changed

+10
-6
lines changed

src/main/scala/inox/tip/Printer.scala

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,14 @@ class Printer(val program: InoxProgram, val context: Context, writer: Writer) ex
118118
case _ => super.computeSort(t)
119119
}
120120

121+
private def getGenericTupleType(n: Int): TupleType = {
122+
tuples.getOrElse(n, {
123+
val res = TupleType(List.range(0, n).map(i => TypeParameter.fresh("A" + i)))
124+
tuples(n) = res
125+
res
126+
})
127+
}
128+
121129
override protected def declareStructuralSort(t: Type): Sort = t match {
122130
case adt: ADTType =>
123131
val tpe = liftADTType(adt)
@@ -127,11 +135,7 @@ class Printer(val program: InoxProgram, val context: Context, writer: Writer) ex
127135
Sort(id, tpSorts)
128136

129137
case TupleType(ts) =>
130-
val tpe = tuples.getOrElse(ts.size, {
131-
val res = TupleType(List.range(0, ts.size).map(i => TypeParameter.fresh("A" + i)))
132-
tuples(ts.size) = res
133-
res
134-
})
138+
val tpe = getGenericTupleType(ts.size)
135139
adtManager.declareADTs(tpe, declareDatatypes)
136140
val tpSorts = ts.map(declareSort)
137141
Sort(sorts.toB(tpe).id, tpSorts)
@@ -161,7 +165,7 @@ class Printer(val program: InoxProgram, val context: Context, writer: Writer) ex
161165
}))
162166

163167
case (TupleType(tps), DataType(sym, Seq(Constructor(id, TupleCons(_), fields)))) =>
164-
val TupleType(tparams) = tuples(tps.size)
168+
val TupleType(tparams) = getGenericTupleType(tps.size)
165169
(TupleType(tparams), DataType(sym, Seq(Constructor(id, TupleCons(tparams),
166170
(fields zip tparams).map { case ((id, _), tpe) => (id, tpe) }))))
167171

0 commit comments

Comments
 (0)