Skip to content

Commit f9da6a6

Browse files
committed
Syntactic sugar for strings and regex concatenation
1 parent 45bd801 commit f9da6a6

3 files changed

Lines changed: 18 additions & 6 deletions

File tree

ksmt-core/src/main/kotlin/io/ksmt/KContext.kt

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1953,18 +1953,24 @@ open class KContext(
19531953
/**
19541954
* Create String concatenation (`concat`) expression.
19551955
* */
1956-
open fun mkStringConcatExpr(arg0: KExpr<KStringSort>, arg1: KExpr<KStringSort>): KExpr<KStringSort> =
1957-
mkSimplified(arg0, arg1, KContext::mkStringConcatExprNoSimplify, ::mkStringConcatExprNoSimplify) // Add simplified version
1956+
open fun mkStringConcat(arg0: KExpr<KStringSort>, arg1: KExpr<KStringSort>): KExpr<KStringSort> =
1957+
mkSimplified(arg0, arg1, KContext::mkStringConcatNoSimplify, ::mkStringConcatNoSimplify) // Add simplified version
19581958

19591959
/**
19601960
* Create String concatenation (`concat`) expression.
19611961
* */
1962-
open fun mkStringConcatExprNoSimplify(arg0: KExpr<KStringSort>, arg1: KExpr<KStringSort>): KStringConcatExpr =
1962+
open fun mkStringConcatNoSimplify(arg0: KExpr<KStringSort>, arg1: KExpr<KStringSort>): KStringConcatExpr =
19631963
stringConcatExprCache.createIfContextActive {
19641964
ensureContextMatch(arg0, arg1)
19651965
KStringConcatExpr(this, arg0, arg1)
19661966
}
19671967

1968+
/**
1969+
* Create String concatenation (`concat`) expression.
1970+
* */
1971+
@JvmName("stringConcat")
1972+
operator fun KExpr<KStringSort>.plus(other: KExpr<KStringSort>) = mkStringConcat(this, other)
1973+
19681974
private val stringLenExprCache = mkAstInterner<KStringLenExpr>()
19691975

19701976
/**
@@ -2183,6 +2189,12 @@ open class KContext(
21832189
KRegexConcatExpr(this, arg0, arg1)
21842190
}
21852191

2192+
/**
2193+
* Create Regex concatenation (`concat`) expression.
2194+
* */
2195+
@JvmName("regexConcat")
2196+
operator fun KExpr<KRegexSort>.plus(other: KExpr<KRegexSort>) = mkRegexConcat(this, other)
2197+
21862198
private val regexUnionExprCache = mkAstInterner<KRegexUnionExpr>()
21872199

21882200
/**

ksmt-core/src/main/kotlin/io/ksmt/decl/Regex.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class KRegexConcatDecl internal constructor(
1717
ctx: KContext,
1818
) : KFuncDecl2<KRegexSort, KRegexSort, KRegexSort>(
1919
ctx,
20-
name = "concat",
20+
name = "regex_concat",
2121
resultSort = ctx.mkRegexSort(),
2222
ctx.mkRegexSort(),
2323
ctx.mkRegexSort()

ksmt-core/src/main/kotlin/io/ksmt/decl/String.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ class KStringConcatDecl internal constructor(
2020
ctx: KContext,
2121
) : KFuncDecl2<KStringSort, KStringSort, KStringSort>(
2222
ctx,
23-
name = "concat",
23+
name = "str_concat",
2424
resultSort = ctx.mkStringSort(),
2525
ctx.mkStringSort(),
2626
ctx.mkStringSort()
@@ -30,7 +30,7 @@ class KStringConcatDecl internal constructor(
3030
override fun KContext.apply(
3131
arg0: KExpr<KStringSort>,
3232
arg1: KExpr<KStringSort>
33-
): KApp<KStringSort, *> = mkStringConcatExprNoSimplify(arg0, arg1)
33+
): KApp<KStringSort, *> = mkStringConcatNoSimplify(arg0, arg1)
3434
}
3535

3636
class KStringLenDecl internal constructor(

0 commit comments

Comments
 (0)