/* package */void visitF31tStmt(final Op op, final int reg, final DexLabel label) { add(new DexStmtNode(op) {
@Override public void visitLabel(final DexLabel label) { addCare(new DexLabelStmtNode(label)); } }
@Override public Object visitFarraydata(SmaliParser.FarraydataContext ctx) { int size = parseInt(ctx.size.getText()); List<SmaliParser.SBaseValueContext> ts = ctx.sBaseValue(); byte[] ps = new byte[ts.size()]; for (int i = 0; i < ts.size(); i++) { ps[i] = ((Number) parseBaseValue(ts.get(i))).byteValue(); } scv.dArrayData(size, ps); return null; }
return; final SmaliCodeVisitor scv = new SmaliCodeVisitor(dexCodeVisitor); final DexDebugVisitor dexDebugVisitor = scv.visitDebug(); final List<SmaliParser.SInstructionContext> instructionContexts = ctx.sInstruction(); final SmaliBaseVisitor v = new SmaliBaseVisitor() { scv.visitRegister(m.total); if (dexDebugVisitor != null) { for (int i = 0; i < m.paramNames.length; i++) { parserRuleContext.accept(v); scv.visitEnd();
case CONST_STRING: case CONST_STRING_JUMBO: scv.visitConstStmt(op, r, unescapeStr(cst.getText())); break; case CONST_CLASS: scv.visitConstStmt(op, r, new DexType(unEscapeId(cst.getText()))); break; case CHECK_CAST: case NEW_INSTANCE: scv.visitTypeStmt(op, r, 0, unEscapeId(cst.getText())); break; case CONST_WIDE: scv.visitConstStmt(op, r, cst.getType() == SmaliLexer.INT ? ((long) parseInt(cst.getText())) : parseLong(cst.getText())); break; case CONST_WIDE_16: { scv.visitConstStmt(op, r, v); scv.visitConstStmt(op, r, v); scv.visitConstStmt(op, r, v); case CONST_16: { int v = parseInt(cst.getText()); scv.visitConstStmt(op, r, v); int v = parseInt(cst.getText()); v <<= 16; scv.visitConstStmt(op, r, v);
@Override public Object visitFpackageswitch(SmaliParser.FpackageswitchContext ctx) { int start = parseInt(ctx.start.getText()); List<TerminalNode> ts = ctx.LABEL(); DexLabel labels[] = new DexLabel[ts.size()]; for (int i = 0; i < ts.size(); i++) { labels[i] = getLabel(ts.get(i).getSymbol().getText()); } scv.dPackedSwitch(start, labels); return null; }
@Override public Object visitFspareswitch(SmaliParser.FspareswitchContext ctx) { List<TerminalNode> ints = ctx.INT(); List<TerminalNode> ts = ctx.LABEL(); int cases[] = new int[ts.size()]; DexLabel labels[] = new DexLabel[ts.size()]; for (int i = 0; i < ts.size(); i++) { cases[i] = parseInt(ints.get(i).getSymbol().getText()); labels[i] = getLabel(ts.get(i).getSymbol().getText()); } scv.dSparseSwitch(cases, labels); return null; }
@Override public void accept(DexCodeVisitor cv) { int labelIndex = findLabelIndex(label); if (labelIndex < 0 || labelIndex >= needCareStmts.size()) { throw new RuntimeException("can't find label for " + op + " " + label);
/* package */void dSparseSwitch(int[] cases, DexLabel[] labels) { addCare(new SparseSwitchStmt(cases, labels)); }
/* package */void dArrayData(int length, byte[] obj) { addCare(new ArrayDataStmt(length, obj)); }
void dPackedSwitch(int first, DexLabel[] labels) { addCare(new PackedSwitchStmt(first, labels)); }