Search in sources :

Example 1 with IfOp

use of jadx.core.dex.instructions.IfOp in project jadx by skylot.

the class ConditionGen method addCompare.

private void addCompare(CodeWriter code, CondStack stack, Compare compare) throws CodegenException {
    IfOp op = compare.getOp();
    InsnArg firstArg = compare.getA();
    InsnArg secondArg = compare.getB();
    if (firstArg.getType().equals(ArgType.BOOLEAN) && secondArg.isLiteral() && secondArg.getType().equals(ArgType.BOOLEAN)) {
        LiteralArg lit = (LiteralArg) secondArg;
        if (lit.getLiteral() == 0) {
            op = op.invert();
        }
        if (op == IfOp.EQ) {
            // == true
            if (stack.getStack().size() == 1) {
                addArg(code, firstArg, false);
            } else {
                wrap(code, firstArg);
            }
            return;
        } else if (op == IfOp.NE) {
            // != true
            code.add('!');
            wrap(code, firstArg);
            return;
        }
        LOG.warn(ErrorsCounter.formatErrorMsg(mth, "Unsupported boolean condition " + op.getSymbol()));
    }
    addArg(code, firstArg, isArgWrapNeeded(firstArg));
    code.add(' ').add(op.getSymbol()).add(' ');
    addArg(code, secondArg, isArgWrapNeeded(secondArg));
}
Also used : InsnArg(jadx.core.dex.instructions.args.InsnArg) LiteralArg(jadx.core.dex.instructions.args.LiteralArg) IfOp(jadx.core.dex.instructions.IfOp)

Aggregations

IfOp (jadx.core.dex.instructions.IfOp)1 InsnArg (jadx.core.dex.instructions.args.InsnArg)1 LiteralArg (jadx.core.dex.instructions.args.LiteralArg)1