decompiler: line mapping for break and continue
This commit is contained in:
@@ -768,6 +768,16 @@ public class ExprProcessor implements CodeConstants {
|
|||||||
.isClassDef()));
|
.isClassDef()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void addDeletedGotoInstructionMapping(Statement stat, BytecodeMappingTracer tracer) {
|
||||||
|
if (stat instanceof BasicBlockStatement) {
|
||||||
|
BasicBlock block = ((BasicBlockStatement)stat).getBlock();
|
||||||
|
List<Integer> offsets = block.getInstrOldOffsets();
|
||||||
|
if (!offsets.isEmpty() && offsets.size() > block.getSeq().length()) { // some instructions have been deleted, but we still have offsets
|
||||||
|
tracer.addMapping(offsets.get(offsets.size() - 1)); // add the last offset
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static TextBuffer jmpWrapper(Statement stat, int indent, boolean semicolon, BytecodeMappingTracer tracer) {
|
public static TextBuffer jmpWrapper(Statement stat, int indent, boolean semicolon, BytecodeMappingTracer tracer) {
|
||||||
TextBuffer buf = stat.toJava(indent, tracer);
|
TextBuffer buf = stat.toJava(indent, tracer);
|
||||||
|
|
||||||
@@ -779,9 +789,11 @@ public class ExprProcessor implements CodeConstants {
|
|||||||
|
|
||||||
switch (edge.getType()) {
|
switch (edge.getType()) {
|
||||||
case StatEdge.TYPE_BREAK:
|
case StatEdge.TYPE_BREAK:
|
||||||
|
addDeletedGotoInstructionMapping(stat, tracer);
|
||||||
buf.append("break");
|
buf.append("break");
|
||||||
break;
|
break;
|
||||||
case StatEdge.TYPE_CONTINUE:
|
case StatEdge.TYPE_CONTINUE:
|
||||||
|
addDeletedGotoInstructionMapping(stat, tracer);
|
||||||
buf.append("continue");
|
buf.append("continue");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ public class TestClassLoop {
|
|||||||
} finally {
|
} finally {
|
||||||
if(var0) {// 52
|
if(var0) {// 52
|
||||||
System.out.println("3");// 53
|
System.out.println("3");// 53
|
||||||
continue;
|
continue;// 54
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -72,6 +72,7 @@ class 'pkg/TestClassLoop' {
|
|||||||
2a 33
|
2a 33
|
||||||
2d 33
|
2d 33
|
||||||
2f 33
|
2f 33
|
||||||
|
32 34
|
||||||
37 39
|
37 39
|
||||||
3a 39
|
3a 39
|
||||||
3c 39
|
3c 39
|
||||||
@@ -88,7 +89,7 @@ Lines mapping:
|
|||||||
49 <-> 30
|
49 <-> 30
|
||||||
52 <-> 33
|
52 <-> 33
|
||||||
53 <-> 34
|
53 <-> 34
|
||||||
|
54 <-> 35
|
||||||
58 <-> 40
|
58 <-> 40
|
||||||
Not mapped:
|
Not mapped:
|
||||||
39
|
39
|
||||||
54
|
|
||||||
|
|||||||
@@ -27,10 +27,10 @@ public class TestClassTypes {
|
|||||||
switch(var1) {// 46
|
switch(var1) {// 46
|
||||||
case 88:
|
case 88:
|
||||||
System.out.println("1");// 48
|
System.out.println("1");// 48
|
||||||
break;
|
break;// 49
|
||||||
case 656:
|
case 656:
|
||||||
System.out.println("2");// 51
|
System.out.println("2");// 51
|
||||||
break;
|
break;// 52
|
||||||
case 65201:
|
case 65201:
|
||||||
case 65489:
|
case 65489:
|
||||||
System.out.println("3");// 55
|
System.out.println("3");// 55
|
||||||
@@ -87,9 +87,11 @@ class 'pkg/TestClassTypes' {
|
|||||||
2c 28
|
2c 28
|
||||||
2f 28
|
2f 28
|
||||||
31 28
|
31 28
|
||||||
|
34 29
|
||||||
37 31
|
37 31
|
||||||
3a 31
|
3a 31
|
||||||
3c 31
|
3c 31
|
||||||
|
3f 32
|
||||||
42 35
|
42 35
|
||||||
45 35
|
45 35
|
||||||
47 35
|
47 35
|
||||||
@@ -122,7 +124,9 @@ Lines mapping:
|
|||||||
41 <-> 23
|
41 <-> 23
|
||||||
46 <-> 27
|
46 <-> 27
|
||||||
48 <-> 29
|
48 <-> 29
|
||||||
|
49 <-> 30
|
||||||
51 <-> 32
|
51 <-> 32
|
||||||
|
52 <-> 33
|
||||||
55 <-> 36
|
55 <-> 36
|
||||||
57 <-> 39
|
57 <-> 39
|
||||||
61 <-> 42
|
61 <-> 42
|
||||||
@@ -130,6 +134,3 @@ Lines mapping:
|
|||||||
64 <-> 44
|
64 <-> 44
|
||||||
67 <-> 47
|
67 <-> 47
|
||||||
68 <-> 48
|
68 <-> 48
|
||||||
Not mapped:
|
|
||||||
49
|
|
||||||
52
|
|
||||||
|
|||||||
Reference in New Issue
Block a user