Debugger: Fix breakpoints on if/loops with constant conditions (KT-14421)
This commit is contained in:
@@ -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
|
||||
+5
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user