Debugger: Fix breakpoints on if/loops with constant conditions (KT-14421)

This commit is contained in:
Yan Zhulanow
2019-06-20 21:30:45 +09:00
parent 6fc801afd2
commit 9760c156a4
5 changed files with 79 additions and 1 deletions
@@ -51,12 +51,14 @@ open class BranchedValue(
val TRUE: BranchedValue = object : BranchedValue(StackValue.none()/*not used*/, null, Type.BOOLEAN_TYPE, IFEQ) {
override fun condJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
v.nop()
if (!jumpIfFalse) {
v.goTo(jumpLabel)
}
}
override fun loopJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
v.nop()
if (!jumpIfFalse) {
v.fakeAlwaysTrueIfeq(jumpLabel)
} else {
@@ -72,12 +74,14 @@ open class BranchedValue(
val FALSE: BranchedValue = object : BranchedValue(StackValue.none()/*not used*/, null, Type.BOOLEAN_TYPE, IFEQ) {
override fun condJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
v.nop()
if (jumpIfFalse) {
v.goTo(jumpLabel)
}
}
override fun loopJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
v.nop()
if (jumpIfFalse) {
v.fakeAlwaysTrueIfeq(jumpLabel)
} else {
@@ -10,4 +10,4 @@ fun testSome(): Boolean {
return false
}
// 2 +3 4 2 7 10
// 2 3 4 2 7 10
@@ -0,0 +1,52 @@
package constantConditions
fun main() {
trueIf()
falseIf()
elseIf()
whileFalse()
whileTrue()
}
private fun trueIf() {
//Breakpoint!
if (true)
foo("true")
else
foo("false")
}
private fun falseIf() {
//Breakpoint!
if(false)
foo("false")
else
foo("true")
}
private fun elseIf() {
//Breakpoint!
if (false)
foo("false")
//Breakpoint!
else if (true)
foo("true")
}
private fun whileFalse() {
//Breakpoint!
while (false)
foo("while false")
}
private fun whileTrue() {
//Breakpoint!
while (true)
break
}
private fun foo(text: String) {}
// RESUME: 6
@@ -0,0 +1,17 @@
LineBreakpoint created at constantConditions.kt:13
LineBreakpoint created at constantConditions.kt:21
LineBreakpoint created at constantConditions.kt:29
LineBreakpoint created at constantConditions.kt:32
LineBreakpoint created at constantConditions.kt:39
LineBreakpoint created at constantConditions.kt:46
Run Java
Connected to the target VM
constantConditions.kt:13
constantConditions.kt:21
constantConditions.kt:29
constantConditions.kt:32
constantConditions.kt:39
constantConditions.kt:46
Disconnected from the target VM
Process finished with exit code 0
@@ -1037,6 +1037,11 @@ public class KotlinSteppingTestGenerated extends AbstractKotlinSteppingTest {
runTest("idea/testData/debugger/tinyApp/src/stepping/custom/anonymousFunAsParamDefaultValue.kt");
}
@TestMetadata("constantConditions.kt")
public void testConstantConditions() throws Exception {
runTest("idea/testData/debugger/tinyApp/src/stepping/custom/constantConditions.kt");
}
@TestMetadata("coroutine.kt")
public void testCoroutine() throws Exception {
runTest("idea/testData/debugger/tinyApp/src/stepping/custom/coroutine.kt");