@Override public void visitTryCatch(DexLabel start, DexLabel end, DexLabel[] handler, String[] type) { for (int i = 0; i < type.length; i++) { String t = type[i]; if (t == null) { out.s(".catchall { %s .. %s } %s", xLabel(start), xLabel(end), xLabel(handler[i])); } else { out.s(".catch %s { %s .. %s } %s", t, xLabel(start), xLabel(end), xLabel(handler[i])); } } }
@Override public void visitLabel(DexLabel label) { if (usedLabel.contains(label)) { out.s(xLabel(label)); } List<DexDebugNode.DexDebugOpNode> dOps = debugLabelMap.get(label); if (dOps != null) { for (DexDebugNode.DexDebugOpNode dOp : dOps) { dOp.accept(debugDumper); } } }
@Override public void visitFillArrayDataStmt(Op op, int ra, Object array) { DexLabel dx = new DexLabel(); dx.displayName = "L" + nextLabelNumber++; usedLabel.add(dx); out.s("%s %s, %s", op.displayName, reg(ra), xLabel(dx)); appendLast.add(new AbstractMap.SimpleEntry<DexLabel, Object>(dx, array)); }
@Override public void visitJumpStmt(Op op, int a, int b, DexLabel label) { if (op.format == InstructionFormat.kFmt21t || op.format == InstructionFormat.kFmt31t) { out.s(op.displayName + " " + reg(a) + ", " + xLabel(label)); } else if (op.format == InstructionFormat.kFmt22t) { out.s(op.displayName + " " + reg(a) + ", " + reg(b) + ", " + xLabel(label)); } else { out.s(op.displayName + " " + xLabel(label)); } }
@Override public void visitPackedSwitchStmt(Op op, int ra, int first_case, DexLabel[] labels) { DexLabel dx = new DexLabel(); dx.displayName = "L" + nextLabelNumber++; usedLabel.add(dx); out.s(op.displayName + " " + reg(ra) + ", " + xLabel(dx)); appendLast.add(new AbstractMap.SimpleEntry<DexLabel, Object>(dx, new PackedSwitchStmt(first_case, labels))); }
@Override public void visitSparseSwitchStmt(Op op, int ra, int[] cases, DexLabel[] labels) { DexLabel dx = new DexLabel(); dx.displayName = "L" + nextLabelNumber++; usedLabel.add(dx); out.s(op.displayName + " " + reg(ra) + ", " + xLabel(dx)); appendLast.add(new AbstractMap.SimpleEntry<DexLabel, Object>(dx, new SparseSwitchStmt(cases, labels))); }