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) {
|
val TRUE: BranchedValue = object : BranchedValue(StackValue.none()/*not used*/, null, Type.BOOLEAN_TYPE, IFEQ) {
|
||||||
override fun condJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
|
override fun condJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
|
||||||
|
v.nop()
|
||||||
if (!jumpIfFalse) {
|
if (!jumpIfFalse) {
|
||||||
v.goTo(jumpLabel)
|
v.goTo(jumpLabel)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun loopJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
|
override fun loopJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
|
||||||
|
v.nop()
|
||||||
if (!jumpIfFalse) {
|
if (!jumpIfFalse) {
|
||||||
v.fakeAlwaysTrueIfeq(jumpLabel)
|
v.fakeAlwaysTrueIfeq(jumpLabel)
|
||||||
} else {
|
} else {
|
||||||
@@ -72,12 +74,14 @@ open class BranchedValue(
|
|||||||
|
|
||||||
val FALSE: BranchedValue = object : BranchedValue(StackValue.none()/*not used*/, null, Type.BOOLEAN_TYPE, IFEQ) {
|
val FALSE: BranchedValue = object : BranchedValue(StackValue.none()/*not used*/, null, Type.BOOLEAN_TYPE, IFEQ) {
|
||||||
override fun condJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
|
override fun condJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
|
||||||
|
v.nop()
|
||||||
if (jumpIfFalse) {
|
if (jumpIfFalse) {
|
||||||
v.goTo(jumpLabel)
|
v.goTo(jumpLabel)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun loopJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
|
override fun loopJump(jumpLabel: Label, v: InstructionAdapter, jumpIfFalse: Boolean) {
|
||||||
|
v.nop()
|
||||||
if (jumpIfFalse) {
|
if (jumpIfFalse) {
|
||||||
v.fakeAlwaysTrueIfeq(jumpLabel)
|
v.fakeAlwaysTrueIfeq(jumpLabel)
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -10,4 +10,4 @@ fun testSome(): Boolean {
|
|||||||
return false
|
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");
|
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")
|
@TestMetadata("coroutine.kt")
|
||||||
public void testCoroutine() throws Exception {
|
public void testCoroutine() throws Exception {
|
||||||
runTest("idea/testData/debugger/tinyApp/src/stepping/custom/coroutine.kt");
|
runTest("idea/testData/debugger/tinyApp/src/stepping/custom/coroutine.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user