Skip to content

Commit bbcdaed

Browse files
committed
Add string parsing for Z3 4.8.12
1 parent 2f66f5a commit bbcdaed

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

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

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,9 @@ trait SMTLIBParser {
224224
val MapType(from, to) = fromSMT(sort)
225225
FiniteMap(Seq.empty, d, from, to)
226226

227-
case _ => throw new MissformedSMTException(term, "Unknown SMT term of class: " + term.getClass)
227+
case _ => throw new MissformedSMTException(term,
228+
s"Unknown SMT term of class: ${term.getClass}:\n$term"
229+
)
228230
}
229231

230232
protected def fromSMT(sort: Sort)(implicit context: Context): Type = sort match {

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,11 +153,17 @@ 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("seq.unit")), None), args), Some(StringType())) =>
157+
StringLiteral(args.map(fromSMT(_, Some(CharType())).asInstanceOf[CharLiteral].value).mkString)
158+
156159
case (FunctionApplication(QualifiedIdentifier(SimpleIdentifier(SSymbol("str.++")), None), strs), _) =>
157160
val strings = strs.map(fromSMT(_, Some(StringType())))
158161
if (strings.isEmpty) StringLiteral("")
159162
else strings.tail.foldRight(strings.head)(StringConcat(_, _))
160163

164+
case (QualifiedIdentifier(SMTIdentifier(SSymbol("Char"), Seq(SNumeral(n))), None), Some(CharType())) =>
165+
CharLiteral(n.toChar)
166+
161167
case (QualifiedIdentifier(ExtendedIdentifier(SSymbol("as-array"), k: SSymbol), _), Some(tpe @ MapType(keyType, valueType))) =>
162168
val Some(Lambda(Seq(arg), body)) = context.getFunction(k, FunctionType(Seq(keyType), valueType))
163169

0 commit comments

Comments
 (0)