Support single-underscore named variables in JVM backend
There are mainly two kind of changes: - skipping 'componentX' calls for destructuring entries named _ - fixing local variable table for them - skip entries for destructuring entries named _ - use $noName_<i> format for lambda parameters named _ #KT-3824 Fixed #KT-2783 Fixed
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
LineBreakpoint created at underscoreNames.kt:18 lambdaOrdinal = 1
|
||||
!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! underscoreNames.UnderscoreNamesKt
|
||||
Connected to the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
|
||||
underscoreNames.kt:18
|
||||
Compile bytecode for x
|
||||
Compile bytecode for y
|
||||
package underscoreNames
|
||||
data class A(val x: Double = 1.0, val y: String = "", val z: Char = '0')
|
||||
|
||||
fun foo(a: A, block: (A, String, Int) -> String): String = block(a, "", 1)
|
||||
|
||||
val arrayOfA: Array<A> = Array(1) { A() }
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
|
||||
foo(A()) {
|
||||
(x, _, y), _, w ->
|
||||
|
||||
val (a, _, c) = A()
|
||||
val (_, `_`, d) = A()
|
||||
|
||||
for ((_, q) in arrayOfA) {
|
||||
//Breakpoint! (lambdaOrdinal = 1)
|
||||
println(q)
|
||||
}
|
||||
|
||||
""
|
||||
}
|
||||
}
|
||||
|
||||
// PRINT_FRAME
|
||||
|
||||
// EXPRESSION: x
|
||||
// RESULT: 1.0: D
|
||||
|
||||
// EXPRESSION: y
|
||||
// RESULT: 48: C
|
||||
|
||||
|
||||
Compile bytecode for arrayOfA
|
||||
frame = invoke:18, UnderscoreNamesKt$main$1 {underscoreNames}
|
||||
this = this = {underscoreNames.UnderscoreNamesKt$main$1@uniqueID}Function3<underscoreNames.A, java.lang.String, java.lang.Integer, java.lang.String>
|
||||
field = arity: int = 3 (sp = Lambda.!EXT!)
|
||||
local = $x_$_$_y: underscoreNames.A = {underscoreNames.A@uniqueID}A(x=1.0, y=, z=0) (sp = null)
|
||||
field = x: double = 1.0 (sp = underscoreNames.kt, 2)
|
||||
field = y: java.lang.String = (sp = underscoreNames.kt, 2)
|
||||
field = value: char[] = {char[0]@uniqueID} (sp = String.!EXT!)
|
||||
field = hash: int = 0 (sp = String.!EXT!)
|
||||
field = z: char = '0' 48 (sp = underscoreNames.kt, 2)
|
||||
local = $noName_1: java.lang.String = (sp = null)
|
||||
field = value: char[] = {char[0]@uniqueID} (sp = String.!EXT!)
|
||||
field = hash: int = 0 (sp = String.!EXT!)
|
||||
local = w: int = 1 (sp = underscoreNames.kt, 11)
|
||||
local = x: double = 1.0 (sp = underscoreNames.kt, 11)
|
||||
local = y: char = '0' 48 (sp = underscoreNames.kt, 11)
|
||||
local = a: double = 1.0 (sp = underscoreNames.kt, 13)
|
||||
local = c: char = '0' 48 (sp = underscoreNames.kt, 13)
|
||||
local = _: java.lang.String = (sp = underscoreNames.kt, 14)
|
||||
field = value: char[] = {char[0]@uniqueID} (sp = String.!EXT!)
|
||||
field = hash: int = 0 (sp = String.!EXT!)
|
||||
local = d: char = '0' 48 (sp = underscoreNames.kt, 14)
|
||||
local = q: java.lang.String = (sp = underscoreNames.kt, 16)
|
||||
field = value: char[] = {char[0]@uniqueID} (sp = String.!EXT!)
|
||||
field = hash: int = 0 (sp = String.!EXT!)
|
||||
Disconnected from the target VM, address: '!HOST_NAME!:PORT_NAME!', transport: 'socket'
|
||||
|
||||
Process finished with exit code 0
|
||||
|
||||
+32
@@ -0,0 +1,32 @@
|
||||
package underscoreNames
|
||||
data class A(val x: Double = 1.0, val y: String = "", val z: Char = '0')
|
||||
|
||||
fun foo(a: A, block: (A, String, Int) -> String): String = block(a, "", 1)
|
||||
|
||||
val arrayOfA: Array<A> = Array(1) { A() }
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
|
||||
foo(A()) {
|
||||
(x, _, y), _, w ->
|
||||
|
||||
val (a, _, c) = A()
|
||||
val (_, `_`, d) = A()
|
||||
|
||||
for ((_, q) in arrayOfA) {
|
||||
//Breakpoint! (lambdaOrdinal = 1)
|
||||
println(q)
|
||||
}
|
||||
|
||||
""
|
||||
}
|
||||
}
|
||||
|
||||
// PRINT_FRAME
|
||||
|
||||
// EXPRESSION: x
|
||||
// RESULT: 1.0: D
|
||||
|
||||
// EXPRESSION: y
|
||||
// RESULT: 48: C
|
||||
|
||||
Reference in New Issue
Block a user