Skip to content

Commit d9ed8c0

Browse files
authored
String concat transformer (#214)
1 parent 158ad96 commit d9ed8c0

File tree

9 files changed

+631
-251
lines changed

9 files changed

+631
-251
lines changed

usvm-jvm/build.gradle.kts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@ val samples by sourceSets.creating {
1010
}
1111
}
1212

13+
val `samples-jdk11` by sourceSets.creating {
14+
java {
15+
srcDir("src/samples-jdk11/java")
16+
}
17+
}
18+
1319
val `sample-approximations` by sourceSets.creating {
1420
java {
1521
srcDir("src/sample-approximations/java")
@@ -92,9 +98,20 @@ val `usvm-api-jar` = tasks.register<Jar>("usvm-api-jar") {
9298
val testSamples by configurations.creating
9399
val testSamplesWithApproximations by configurations.creating
94100

101+
val compileSamplesJdk11 = tasks.register<JavaCompile>("compileSamplesJdk11") {
102+
sourceCompatibility = JavaVersion.VERSION_11.toString()
103+
targetCompatibility = JavaVersion.VERSION_11.toString()
104+
105+
source = `samples-jdk11`.java
106+
classpath = `samples-jdk11`.compileClasspath
107+
options.sourcepath = `samples-jdk11`.java
108+
destinationDirectory = `samples-jdk11`.java.destinationDirectory
109+
}
110+
95111
dependencies {
96112
testSamples(samples.output)
97113
testSamples(`usvm-api`.output)
114+
testSamples(files(`samples-jdk11`.java.destinationDirectory))
98115

99116
testSamplesWithApproximations(samples.output)
100117
testSamplesWithApproximations(`usvm-api`.output)
@@ -104,7 +121,7 @@ dependencies {
104121

105122
tasks.withType<Test> {
106123
dependsOn(`usvm-api-jar`)
107-
dependsOn(testSamples, testSamplesWithApproximations)
124+
dependsOn(compileSamplesJdk11, testSamples, testSamplesWithApproximations)
108125

109126
val usvmApiJarPath = `usvm-api-jar`.get().outputs.files.singleFile
110127
val usvmApproximationJarPath = approximations.resolvedConfiguration.files.single()

usvm-jvm/src/main/kotlin/org/usvm/machine/interpreter/JcExprResolver.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,9 @@ import org.usvm.machine.interpreter.statics.JcStaticFieldRegionId
103103
import org.usvm.machine.interpreter.statics.JcStaticFieldsMemoryRegion
104104
import org.usvm.machine.interpreter.statics.isInitialized
105105
import org.usvm.machine.interpreter.statics.markAsInitialized
106+
import org.usvm.machine.interpreter.transformers.JcMultiDimArrayAllocationTransformer
107+
import org.usvm.machine.interpreter.transformers.JcStringConcatTransformer
108+
import org.usvm.machine.logger
106109
import org.usvm.machine.operator.JcBinaryOperator
107110
import org.usvm.machine.operator.JcUnaryOperator
108111
import org.usvm.machine.operator.ensureBvExpr
@@ -408,7 +411,11 @@ class JcExprResolver(
408411
}
409412

410413
override fun visitJcDynamicCallExpr(expr: JcDynamicCallExpr): UExpr<out USort>? =
411-
resolveInvoke(
414+
apply {
415+
if (JcStringConcatTransformer.methodIsStringConcat(expr.method.method)) {
416+
logger.warn { "JcStringConcatTransformer should be used to process string concatenation" }
417+
}
418+
}.resolveInvoke(
412419
expr.method,
413420
instanceExpr = null,
414421
argumentExprs = { expr.callSiteArgs },

usvm-jvm/src/main/kotlin/org/usvm/machine/interpreter/JcMultiDimArrayAllocationTransformer.kt

Lines changed: 0 additions & 246 deletions
This file was deleted.

0 commit comments

Comments
 (0)