Merge "Improve CfPrinter output of code"
diff --git a/src/main/java/com/android/tools/r8/cf/CfPrinter.java b/src/main/java/com/android/tools/r8/cf/CfPrinter.java
index 580b037..28bf331 100644
--- a/src/main/java/com/android/tools/r8/cf/CfPrinter.java
+++ b/src/main/java/com/android/tools/r8/cf/CfPrinter.java
@@ -35,6 +35,7 @@
import com.android.tools.r8.cf.code.CfSwitch;
import com.android.tools.r8.cf.code.CfSwitch.Kind;
import com.android.tools.r8.cf.code.CfThrow;
+import com.android.tools.r8.cf.code.CfTryCatch;
import com.android.tools.r8.cf.code.CfUnop;
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.graph.CfCode;
@@ -52,6 +53,7 @@
import com.android.tools.r8.utils.DescriptorUtils;
import com.android.tools.r8.utils.StringUtils;
import com.android.tools.r8.utils.StringUtils.BraceType;
+import it.unimi.dsi.fastutil.ints.Int2ReferenceMap.Entry;
import it.unimi.dsi.fastutil.ints.IntList;
import java.util.HashMap;
import java.util.List;
@@ -112,6 +114,21 @@
appendComment(info.signature.toString());
}
}
+ for (CfTryCatch tryCatch : code.getTryCatchRanges()) {
+ for (int i = 0; i < tryCatch.guards.size(); i++) {
+ newline();
+ DexType guard = tryCatch.guards.get(i);
+ builder
+ .append(".catch ")
+ .append(guard == null ? "all" : guard.getInternalName())
+ .append(" from ")
+ .append(getLabel(tryCatch.start))
+ .append(" to ")
+ .append(getLabel(tryCatch.end))
+ .append(" using ")
+ .append(getLabel(tryCatch.targets.get(i)));
+ }
+ }
for (CfInstruction instruction : code.getInstructions()) {
instruction.print(this);
}
@@ -210,9 +227,13 @@
}
public void print(CfFrame frame) {
- StringBuilder builder = new StringBuilder("frame: ");
- StringUtils.append(builder, frame.getLocals().values(), ", ", BraceType.SQUARE);
- builder.append(' ');
+ StringBuilder builder = new StringBuilder("frame: [");
+ String separator = "";
+ for (Entry<DexType> entry : frame.getLocals().int2ReferenceEntrySet()) {
+ builder.append(separator).append(entry.getIntKey()).append(':').append(entry.getValue());
+ separator = ", ";
+ }
+ builder.append("] ");
StringUtils.append(builder, frame.getStack(), ", ", BraceType.SQUARE);
comment(builder.toString());
}
diff --git a/src/main/java/com/android/tools/r8/graph/CfCode.java b/src/main/java/com/android/tools/r8/graph/CfCode.java
index 58451eb..947f77e 100644
--- a/src/main/java/com/android/tools/r8/graph/CfCode.java
+++ b/src/main/java/com/android/tools/r8/graph/CfCode.java
@@ -91,6 +91,10 @@
return maxLocals;
}
+ public List<CfTryCatch> getTryCatchRanges() {
+ return tryCatchRanges;
+ }
+
public List<CfInstruction> getInstructions() {
return Collections.unmodifiableList(instructions);
}