Fix types in local var table for destructured variables

This commit is contained in:
Denis Zharkov
2016-09-20 10:36:57 +03:00
parent 0792571256
commit 42e85b07c9
3 changed files with 7 additions and 7 deletions
@@ -504,7 +504,7 @@ public class FunctionCodegen {
if (destructuringVariables == null) continue;
for (VariableDescriptor entry : destructuringVariables) {
Type type = typeMapper.mapType(parameter.getType());
Type type = typeMapper.mapType(entry.getType());
mv.visitLocalVariable(entry.getName().asString(), type.getDescriptor(), null, methodBegin, methodEnd, shift);
shift += type.getSize();
}
@@ -1,13 +1,13 @@
data class A(val x: String, val y: String)
data class A(val x: String, val y: Int)
fun foo(a: A, block: (A) -> String): String = block(a)
fun box() {
foo(A("O", "K")) { (x, y) -> x + y }
foo(A("O", 123)) { (x, y) -> x + y }
}
// METHOD : DestructuringInLambdasKt$box$1.invoke(LA;)Ljava/lang/String;
// VARIABLE : NAME=this TYPE=LDestructuringInLambdasKt$box$1; INDEX=0
// VARIABLE : NAME=$x_y TYPE=LA; INDEX=1
// VARIABLE : NAME=x TYPE=LA; INDEX=2
// VARIABLE : NAME=y TYPE=LA; INDEX=3
// VARIABLE : NAME=x TYPE=Ljava/lang/String; INDEX=2
// VARIABLE : NAME=y TYPE=I INDEX=3
+2 -2
View File
@@ -38,11 +38,11 @@ fun main(args: Array<String>) {
field = value: char[] = {char[1]@uniqueID} (sp = String.!EXT!)
element = 0 = 'K' 75
field = hash: int = 0 (sp = String.!EXT!)
local = x: destructuringParam.A = O (sp = destructuringParam.kt, 12)
local = x: java.lang.String = O (sp = destructuringParam.kt, 12)
field = value: char[] = {char[1]@uniqueID} (sp = String.!EXT!)
element = 0 = 'O' 79
field = hash: int = 0 (sp = String.!EXT!)
local = y: destructuringParam.A = K (sp = destructuringParam.kt, 12)
local = y: java.lang.String = K (sp = destructuringParam.kt, 12)
field = value: char[] = {char[1]@uniqueID} (sp = String.!EXT!)
element = 0 = 'K' 75
field = hash: int = 0 (sp = String.!EXT!)