Generate local var table

This commit is contained in:
Michael Bogdanov
2015-03-23 17:22:00 +03:00
parent 5c0a81fae1
commit 8cd496556c
4 changed files with 10 additions and 4 deletions
@@ -63,7 +63,7 @@ import static org.jetbrains.kotlin.resolve.DescriptorUtils.getFqName;
import static org.jetbrains.kotlin.resolve.DescriptorUtils.isTrait;
public class InlineCodegenUtil {
public static final boolean GENERATE_SMAP = false;
public static final boolean GENERATE_SMAP = true;
public static final int API = Opcodes.ASM5;
public static final String INVOKE = "invoke";
@@ -97,9 +97,14 @@ public class LocalVarRemapper {
public void visitLocalVariable(String name, String desc, String signature, Label start, Label end, int index, MethodVisitor mv) {
RemapInfo info = doRemap(index);
//add entries only for shifted vars
if (SHIFT == info.status) {
//add entries only for shifted vars
mv.visitLocalVariable(name, desc, signature, start, end, ((StackValue.Local) info.value).index);
int newIndex = ((StackValue.Local) info.value).index;
if (newIndex != 0 && "this".equals(name)) {
/*skip additional this for now*/
return;
}
mv.visitLocalVariable(name, desc, signature, start, end, newIndex);
}
}
@@ -340,7 +340,7 @@ public class MethodInliner {
public void visitLocalVariable(
@NotNull String name, @NotNull String desc, String signature, @NotNull Label start, @NotNull Label end, int index
) {
if (isInliningLambda) {
if (isInliningLambda || InlineCodegenUtil.GENERATE_SMAP) {
super.visitLocalVariable(name, desc, signature, start, end, getNewIndex(index));
}
}
@@ -17,4 +17,5 @@ class A {
// VARIABLE : NAME=l TYPE=I INDEX=3
// VARIABLE : NAME=zzz TYPE=I INDEX=4
// VARIABLE : NAME=l TYPE=I INDEX=3
// VARIABLE : NAME=p TYPE=I INDEX=2
// VARIABLE : NAME=this TYPE=LA; INDEX=0