Skip to content

Commit 00e2a3d

Browse files
Stepanov/multi dim array fix (#202)
* Creation of multidimensional arrays fixed * minor * Rewrite toString() method for JcNewArray and JcRawNewArray
1 parent e2bd57c commit 00e2a3d

File tree

3 files changed

+25
-3
lines changed

3 files changed

+25
-3
lines changed

jacodb-api/src/main/kotlin/org/jacodb/api/cfg/JcInst.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -606,11 +606,22 @@ data class JcNewArrayExpr(
606606
override val operands: List<JcValue>
607607
get() = dimensions
608608

609-
override fun toString(): String = "new ${type.typeName}${dimensions.joinToString("") { "[$it]" }}"
609+
override fun toString(): String = "new ${arrayTypeToStringWithDimensions(type.typeName, dimensions)}"
610610

611611
override fun <T> accept(visitor: JcExprVisitor<T>): T {
612612
return visitor.visitJcNewArrayExpr(this)
613613
}
614+
615+
companion object {
616+
private val regexToProcessDimensions = Regex("\\[(.*?)]")
617+
618+
private fun arrayTypeToStringWithDimensions(typeName: String, dimensions: List<JcValue>) {
619+
var curDim = 0
620+
regexToProcessDimensions.replace(typeName) {
621+
"[${dimensions.getOrNull(curDim++) ?: ""}]"
622+
}
623+
}
624+
}
614625
}
615626

616627
data class JcInstanceOfExpr(

jacodb-api/src/main/kotlin/org/jacodb/api/cfg/JcRawInst.kt

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -609,11 +609,22 @@ data class JcRawNewArrayExpr(
609609
override val operands: List<JcRawValue>
610610
get() = dimensions
611611

612-
override fun toString(): String = "new $typeName${dimensions.joinToString("") { "[$it]" }}"
612+
override fun toString(): String = "new ${arrayTypeToStringWithDimensions(typeName, dimensions)}"
613613

614614
override fun <T> accept(visitor: JcRawExprVisitor<T>): T {
615615
return visitor.visitJcRawNewArrayExpr(this)
616616
}
617+
618+
companion object {
619+
private val regexToProcessDimensions = Regex("\\[(.*?)]")
620+
621+
private fun arrayTypeToStringWithDimensions(typeName: TypeName, dimensions: List<JcRawValue>) {
622+
var curDim = 0
623+
regexToProcessDimensions.replace("$typeName") {
624+
"[${dimensions.getOrNull(curDim++) ?: ""}]"
625+
}
626+
}
627+
}
617628
}
618629

619630
data class JcRawInstanceOfExpr(

jacodb-core/src/main/kotlin/org/jacodb/impl/cfg/RawInstListBuilder.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1489,7 +1489,7 @@ class RawInstListBuilder(
14891489
repeat(insnNode.dims) {
14901490
dimensions += pop()
14911491
}
1492-
val expr = JcRawNewArrayExpr(insnNode.desc.typeName(), dimensions)
1492+
val expr = JcRawNewArrayExpr(insnNode.desc.typeName(), dimensions.reversed())
14931493
val assignment = nextRegister(expr.typeName)
14941494
addInstruction(insnNode, JcRawAssignInst(method, assignment, expr))
14951495
push(assignment)

0 commit comments

Comments
 (0)