Print debug positions and locals info for methods.
Change-Id: Id270586447e96782f3a0c3dc5ba0079511fbee67
diff --git a/src/main/java/com/android/tools/r8/graph/Code.java b/src/main/java/com/android/tools/r8/graph/Code.java
index 04c01be..dca5e02 100644
--- a/src/main/java/com/android/tools/r8/graph/Code.java
+++ b/src/main/java/com/android/tools/r8/graph/Code.java
@@ -19,7 +19,7 @@
public abstract String toString();
- public abstract String toString(ClassNameMapper naming);
+ public abstract String toString(DexEncodedMethod method, ClassNameMapper naming);
public boolean isDexCode() {
return false;
diff --git a/src/main/java/com/android/tools/r8/graph/DexApplication.java b/src/main/java/com/android/tools/r8/graph/DexApplication.java
index e7485aa..eea0169 100644
--- a/src/main/java/com/android/tools/r8/graph/DexApplication.java
+++ b/src/main/java/com/android/tools/r8/graph/DexApplication.java
@@ -174,7 +174,7 @@
ps.println("Bytecode for");
ps.println("Class: '" + clazzName + "'");
ps.println("Method: '" + methodName + "':");
- ps.println(method.getCode().toString(naming));
+ ps.println(method.getCode().toString(method, naming));
} catch (IOException e) {
e.printStackTrace();
} finally {
diff --git a/src/main/java/com/android/tools/r8/graph/DexCode.java b/src/main/java/com/android/tools/r8/graph/DexCode.java
index ebfd388..f48e7db 100644
--- a/src/main/java/com/android/tools/r8/graph/DexCode.java
+++ b/src/main/java/com/android/tools/r8/graph/DexCode.java
@@ -15,9 +15,11 @@
import com.android.tools.r8.utils.InternalOptions;
import com.android.tools.r8.utils.StringUtils;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Hashtable;
+import java.util.Iterator;
import java.util.Map;
import java.util.Set;
@@ -157,10 +159,10 @@
}
public String toString() {
- return toString(null);
+ return toString(null, null);
}
- public String toString(ClassNameMapper naming) {
+ public String toString(DexEncodedMethod method, ClassNameMapper naming) {
StringBuilder builder = new StringBuilder();
builder.append("registers: ").append(registerSize);
builder.append(", inputs: ").append(incomingRegisterSize);
@@ -168,12 +170,22 @@
builder.append("------------------------------------------------------------\n");
builder.append("inst# offset instruction arguments\n");
builder.append("------------------------------------------------------------\n");
+ DexDebugEntry debugInfo = null;
+ Iterator<DexDebugEntry> debugInfoIterator = Collections.emptyIterator();
+ if (getDebugInfo() != null && method != null) {
+ debugInfoIterator = new DexDebugEntryBuilder(method, new DexItemFactory()).build().iterator();
+ debugInfo = debugInfoIterator.hasNext() ? debugInfoIterator.next() : null;
+ }
int instructionNumber = 0;
for (Instruction insn : instructions) {
StringUtils.appendLeftPadded(builder, Integer.toString(instructionNumber++), 5);
builder.append(": ")
.append(insn.toString(naming))
.append('\n');
+ if (debugInfo != null && debugInfo.address == insn.getOffset()) {
+ builder.append(" ").append(debugInfo).append("\n");
+ debugInfo = debugInfoIterator.hasNext() ? debugInfoIterator.next() : null;
+ }
}
if (tries.length > 0) {
builder.append("Tries (numbers are offsets)\n");
diff --git a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
index 35ebaf2..3df2fab 100644
--- a/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
+++ b/src/main/java/com/android/tools/r8/graph/DexEncodedMethod.java
@@ -348,7 +348,7 @@
}
public String codeToString() {
- return code == null ? "<no code>" : code.toString();
+ return code == null ? "<no code>" : code.toString(this, null);
}
@Override
diff --git a/src/main/java/com/android/tools/r8/graph/JarCode.java b/src/main/java/com/android/tools/r8/graph/JarCode.java
index 2766684..9a367ff 100644
--- a/src/main/java/com/android/tools/r8/graph/JarCode.java
+++ b/src/main/java/com/android/tools/r8/graph/JarCode.java
@@ -112,7 +112,7 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(DexEncodedMethod method, ClassNameMapper naming) {
return toString();
}
diff --git a/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java b/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
index 4ab72f6..0ea5761 100644
--- a/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
+++ b/src/main/java/com/android/tools/r8/ir/optimize/Outliner.java
@@ -991,7 +991,7 @@
}
@Override
- public String toString(ClassNameMapper naming) {
+ public String toString(DexEncodedMethod method, ClassNameMapper naming) {
return null;
}
}
diff --git a/src/main/java/com/android/tools/r8/ir/synthetic/SynthesizedCode.java b/src/main/java/com/android/tools/r8/ir/synthetic/SynthesizedCode.java
index 7716663..3d3f9f1 100644
--- a/src/main/java/com/android/tools/r8/ir/synthetic/SynthesizedCode.java
+++ b/src/main/java/com/android/tools/r8/ir/synthetic/SynthesizedCode.java
@@ -37,7 +37,7 @@
@Override
public final String toString() {
- return toString(null);
+ return toString(null, null);
}
private static void registerReachableDefinitionsDefault(UseRegistry registry) {
@@ -61,7 +61,7 @@
}
@Override
- public final String toString(ClassNameMapper naming) {
+ public final String toString(DexEncodedMethod method, ClassNameMapper naming) {
return "SynthesizedCode: " + sourceCode.toString();
}
}