Generate linenumber for goto instruction in while (KT-13059)
Otherwise linenumber for previous instruction will be used in debugger. That can lead to error stepping because it might be line that isn't reachable on current iteration. #KT-13059 Fixed
This commit is contained in:
@@ -97,6 +97,12 @@ These artifacts include extensions for the types available in the latter JDKs, s
|
|||||||
|
|
||||||
- [`KT-12830`](https://youtrack.jetbrains.com/issue/KT-12830) Remove spaces before *?* in nullable types
|
- [`KT-12830`](https://youtrack.jetbrains.com/issue/KT-12830) Remove spaces before *?* in nullable types
|
||||||
|
|
||||||
|
#### Debugger
|
||||||
|
|
||||||
|
###### Issues fixed
|
||||||
|
|
||||||
|
- [`KT-13059`](https://youtrack.jetbrains.com/issue/KT-13059) Fix error stepping on *Step Over* action in the end of while block
|
||||||
|
|
||||||
## 1.0.3
|
## 1.0.3
|
||||||
|
|
||||||
### Compiler
|
### Compiler
|
||||||
|
|||||||
@@ -528,6 +528,7 @@ public class ExpressionCodegen extends KtVisitor<StackValue, StackValue> impleme
|
|||||||
|
|
||||||
generateLoopBody(expression.getBody());
|
generateLoopBody(expression.getBody());
|
||||||
|
|
||||||
|
markStartLineNumber(expression);
|
||||||
v.goTo(condition);
|
v.goTo(condition);
|
||||||
|
|
||||||
v.mark(end);
|
v.mark(end);
|
||||||
|
|||||||
@@ -0,0 +1,13 @@
|
|||||||
|
fun foo() {
|
||||||
|
while (true) {
|
||||||
|
if (testSome()) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun testSome(): Boolean {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2 3 4 2 7 10
|
||||||
@@ -148,6 +148,12 @@ public class LineNumberTestGenerated extends AbstractLineNumberTest {
|
|||||||
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/lineNumber/custom"), Pattern.compile("^(.+)\\.kt$"), true);
|
KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("compiler/testData/lineNumber/custom"), Pattern.compile("^(.+)\\.kt$"), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("beforeGotoToWhileStart.kt")
|
||||||
|
public void testBeforeGotoToWhileStart() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/lineNumber/custom/beforeGotoToWhileStart.kt");
|
||||||
|
doTestCustom(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("callWithCallInArguments.kt")
|
@TestMetadata("callWithCallInArguments.kt")
|
||||||
public void testCallWithCallInArguments() throws Exception {
|
public void testCallWithCallInArguments() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/lineNumber/custom/callWithCallInArguments.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/lineNumber/custom/callWithCallInArguments.kt");
|
||||||
|
|||||||
@@ -0,0 +1,8 @@
|
|||||||
|
LineBreakpoint created at stepOverFalseConditionInLastIfInWhile.kt:13
|
||||||
|
!JDK_HOME!\bin\java -agentlib:jdwp=transport=dt_socket,address=!HOST_NAME!:!HOST_PORT!,suspend=y,server=n -Dfile.encoding=!FILE_ENCODING! -classpath !OUTPUT_PATH!;!KOTLIN_RUNTIME!;!CUSTOM_LIBRARY!;!RT_JAR! stepOverFalseConditionInLastIfInWhile.StepOverFalseConditionInLastIfInWhileKt
|
||||||
|
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
|
||||||
|
stepOverFalseConditionInLastIfInWhile.kt:13
|
||||||
|
stepOverFalseConditionInLastIfInWhile.kt:6
|
||||||
|
Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
|
||||||
|
|
||||||
|
Process finished with exit code 0
|
||||||
@@ -29,7 +29,6 @@ stepOverWhileWithInline.kt:30
|
|||||||
stepOverWhileWithInline.kt:35
|
stepOverWhileWithInline.kt:35
|
||||||
stepOverWhileWithInline.kt:41
|
stepOverWhileWithInline.kt:41
|
||||||
stepOverWhileWithInline.kt:35
|
stepOverWhileWithInline.kt:35
|
||||||
stepOverWhileWithInline.kt:36
|
|
||||||
stepOverWhileWithInline.kt:38
|
stepOverWhileWithInline.kt:38
|
||||||
Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
|
Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
|
||||||
|
|
||||||
|
|||||||
Vendored
+23
@@ -0,0 +1,23 @@
|
|||||||
|
package stepOverFalseConditionInLastIfInWhile
|
||||||
|
|
||||||
|
fun main(args: Array<String>) {
|
||||||
|
var i = 0
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
if (i > 0) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
i++
|
||||||
|
|
||||||
|
//Breakpoint!
|
||||||
|
if (testSome()) {
|
||||||
|
some()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun testSome(): Boolean {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
fun some() {}
|
||||||
@@ -385,6 +385,12 @@ public class KotlinSteppingTestGenerated extends AbstractKotlinSteppingTest {
|
|||||||
doStepOverTest(fileName);
|
doStepOverTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("stepOverFalseConditionInLastIfInWhile.kt")
|
||||||
|
public void testStepOverFalseConditionInLastIfInWhile() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverFalseConditionInLastIfInWhile.kt");
|
||||||
|
doStepOverTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("stepOverForWithInline.kt")
|
@TestMetadata("stepOverForWithInline.kt")
|
||||||
public void testStepOverForWithInline() throws Exception {
|
public void testStepOverForWithInline() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverForWithInline.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("idea/testData/debugger/tinyApp/src/stepping/stepOver/stepOverForWithInline.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user