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:
Denis Zharkov
2016-10-20 17:23:42 +03:00
parent 544d8f5b66
commit a9fcee098d
18 changed files with 355 additions and 7 deletions
@@ -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