@@ -118,6 +118,14 @@ class Printer(val program: InoxProgram, val context: Context, writer: Writer) ex
118
118
case _ => super .computeSort(t)
119
119
}
120
120
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
+
121
129
override protected def declareStructuralSort (t : Type ): Sort = t match {
122
130
case adt : ADTType =>
123
131
val tpe = liftADTType(adt)
@@ -127,11 +135,7 @@ class Printer(val program: InoxProgram, val context: Context, writer: Writer) ex
127
135
Sort (id, tpSorts)
128
136
129
137
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)
135
139
adtManager.declareADTs(tpe, declareDatatypes)
136
140
val tpSorts = ts.map(declareSort)
137
141
Sort (sorts.toB(tpe).id, tpSorts)
@@ -161,7 +165,7 @@ class Printer(val program: InoxProgram, val context: Context, writer: Writer) ex
161
165
}))
162
166
163
167
case (TupleType (tps), DataType (sym, Seq (Constructor (id, TupleCons (_), fields)))) =>
164
- val TupleType (tparams) = tuples (tps.size)
168
+ val TupleType (tparams) = getGenericTupleType (tps.size)
165
169
(TupleType (tparams), DataType (sym, Seq (Constructor (id, TupleCons (tparams),
166
170
(fields zip tparams).map { case ((id, _), tpe) => (id, tpe) }))))
167
171
0 commit comments