Skip to content

Commit c86aae9

Browse files
committed
Add support for transforming str.++ in Z3
1 parent cd9632a commit c86aae9

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

src/main/scala/inox/solvers/smtlib/Z3Target.scala

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,11 @@ trait Z3Target extends SMTLIBTarget with SMTLIBDebugger {
153153
case (FunctionApplication(QualifiedIdentifier(SimpleIdentifier(SSymbol("seq.unit")), None), Seq(SHexadecimal(hex))), _) =>
154154
StringLiteral(utils.StringUtils.decode(hex.repr))
155155

156+
case (FunctionApplication(QualifiedIdentifier(SimpleIdentifier(SSymbol("str.++")), None), strs), _) =>
157+
val strings = strs.map(fromSMT(_, Some(StringType())))
158+
if (strings.isEmpty) StringLiteral("")
159+
else strings.tail.foldRight(strings.head)(StringConcat(_, _))
160+
156161
case (QualifiedIdentifier(ExtendedIdentifier(SSymbol("as-array"), k: SSymbol), _), Some(tpe @ MapType(keyType, valueType))) =>
157162
val Some(Lambda(Seq(arg), body)) = context.getFunction(k, FunctionType(Seq(keyType), valueType))
158163

0 commit comments

Comments
 (0)