Example usage for org.objectweb.asm Opcodes IFGE

List of usage examples for org.objectweb.asm Opcodes IFGE

Introduction

In this page you can find the example usage for org.objectweb.asm Opcodes IFGE.

Prototype

int IFGE

To view the source code for org.objectweb.asm Opcodes IFGE.

Click Source Link

Usage

From source file:org.evosuite.instrumentation.error.ArrayInstrumentation.java

License:Open Source License

@Override
public void visitTypeInsn(int opcode, String type) {
    if (opcode == Opcodes.ANEWARRAY) {
        mv.visitInsn(Opcodes.DUP);//  ww w.  ja  v  a 2 s . c  o  m
        insertBranch(Opcodes.IFGE, "java/lang/NegativeArraySizeException");
    }
}

From source file:org.evosuite.instrumentation.error.ArrayListInstrumentation.java

License:Open Source License

@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
    if (owner.equals(LISTNAME)) {
        if (indexListMethods.contains(name)) {
            Type[] args = Type.getArgumentTypes(desc);
            if (args.length == 0)
                return;
            if (!args[0].equals(Type.INT_TYPE))
                return;

            Map<Integer, Integer> tempVariables = getMethodCallee(desc);
            tagBranchStart();//from  ww  w .j  av  a  2 s.  c  o  m
            mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, LISTNAME, "size", "()I", false);

            // index >= size
            mv.loadLocal(tempVariables.get(0));
            insertBranch(Opcodes.IF_ICMPGT, "java/lang/IndexOutOfBoundsException");

            // index < 0
            mv.loadLocal(tempVariables.get(0));
            insertBranch(Opcodes.IFGE, "java/lang/IndexOutOfBoundsException");
            tagBranchEnd();

            restoreMethodParameters(tempVariables, desc);
        }
    }
}

From source file:org.evosuite.instrumentation.error.LinkedListInstrumentation.java

License:Open Source License

@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {

    if (owner.equals(LISTNAME)) {
        if (emptyListMethods.contains(name)) {
            // empty
            Map<Integer, Integer> tempVariables = getMethodCallee(desc);

            //tagBranchStart();
            mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, LISTNAME, "isEmpty", "()Z", false);
            insertBranch(Opcodes.IFLE, "java/util/NoSuchElementException");
            //tagBranchEnd();
            restoreMethodParameters(tempVariables, desc);

        } else if (indexListMethods.contains(name)) {
            Type[] args = Type.getArgumentTypes(desc);
            if (args.length == 0)
                return;
            if (!args[0].equals(Type.INT_TYPE))
                return;

            Map<Integer, Integer> tempVariables = getMethodCallee(desc);
            tagBranchStart();/* ww w  . j a va2s  . co m*/
            mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, LISTNAME, "size", "()I", false);

            // index >= size
            mv.loadLocal(tempVariables.get(0));
            insertBranch(Opcodes.IF_ICMPGT, "java/lang/IndexOutOfBoundsException");

            // index < 0
            mv.loadLocal(tempVariables.get(0));
            insertBranch(Opcodes.IFGE, "java/lang/IndexOutOfBoundsException");
            tagBranchEnd();

            restoreMethodParameters(tempVariables, desc);
        }
    }
}

From source file:org.evosuite.instrumentation.error.ListInstrumentation.java

License:Open Source License

@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {

    if (owner.equals(LISTNAME)) {
        if (indexListMethods.contains(name)) {
            Type[] args = Type.getArgumentTypes(desc);
            if (args.length == 0)
                return;
            if (!args[0].equals(Type.INT_TYPE))
                return;

            Map<Integer, Integer> tempVariables = getMethodCallee(desc);
            tagBranchStart();/*from w w w .  jav a2 s . c  o  m*/
            mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, LISTNAME, "size", "()I", false);

            // index >= size
            mv.loadLocal(tempVariables.get(0));
            insertBranch(Opcodes.IF_ICMPGT, "java/lang/IndexOutOfBoundsException");

            // index < 0
            mv.loadLocal(tempVariables.get(0));
            insertBranch(Opcodes.IFGE, "java/lang/IndexOutOfBoundsException");
            tagBranchEnd();

            restoreMethodParameters(tempVariables, desc);
        }
    }
}

From source file:org.evosuite.instrumentation.error.OverflowInstrumentation.java

License:Open Source License

@Override
public void visitInsn(int opcode) {
    // Overflow checks
    switch (opcode) {
    case Opcodes.IADD:
    case Opcodes.ISUB:
    case Opcodes.IMUL:
        mv.visitInsn(Opcodes.DUP2);/*  w  w  w.  j a  v a2 s .  co m*/
        mv.visitLdcInsn(opcode);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, CHECKER, "underflowDistance", "(III)I", false);

        insertBranchWithoutException(Opcodes.IFGT);

    case Opcodes.IDIV:
        mv.visitInsn(Opcodes.DUP2);
        mv.visitLdcInsn(opcode);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, CHECKER, "overflowDistance", "(III)I", false);
        insertBranchWithoutException(Opcodes.IFGT);

        break;

    case Opcodes.FADD:
    case Opcodes.FSUB:
    case Opcodes.FMUL:

        mv.visitInsn(Opcodes.DUP2);
        mv.visitLdcInsn(opcode);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, CHECKER, "underflowDistance", "(FFI)I", false);
        insertBranchWithoutException(Opcodes.IFGE);

    case Opcodes.FDIV:
        mv.visitInsn(Opcodes.DUP2);
        mv.visitLdcInsn(opcode);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, CHECKER, "overflowDistance", "(FFI)I", false);
        insertBranchWithoutException(Opcodes.IFGE);
        break;

    case Opcodes.DADD:
    case Opcodes.DSUB:
    case Opcodes.DMUL:

        int loc = mv.newLocal(Type.DOUBLE_TYPE);
        mv.storeLocal(loc);
        mv.visitInsn(Opcodes.DUP2);
        mv.loadLocal(loc);
        mv.visitInsn(Opcodes.DUP2_X2);
        mv.visitLdcInsn(opcode);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, CHECKER, "underflowDistance", "(DDI)I", false);

        insertBranchWithoutException(Opcodes.IFGE);

    case Opcodes.DDIV:
        loc = mv.newLocal(Type.DOUBLE_TYPE);

        mv.storeLocal(loc);
        mv.visitInsn(Opcodes.DUP2);
        mv.loadLocal(loc);
        mv.visitInsn(Opcodes.DUP2_X2);
        mv.visitLdcInsn(opcode);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, CHECKER, "overflowDistance", "(DDI)I", false);

        insertBranchWithoutException(Opcodes.IFGE);
        break;

    case Opcodes.LADD:
    case Opcodes.LSUB:
    case Opcodes.LMUL:
        int loc2 = mv.newLocal(Type.LONG_TYPE);
        mv.storeLocal(loc2);
        mv.visitInsn(Opcodes.DUP2);
        mv.loadLocal(loc2);
        mv.visitInsn(Opcodes.DUP2_X2);
        mv.visitLdcInsn(opcode);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, CHECKER, "underflowDistance", "(JJI)I", false);

        insertBranchWithoutException(Opcodes.IFGE);

    case Opcodes.LDIV:

        loc2 = mv.newLocal(Type.LONG_TYPE);
        mv.storeLocal(loc2);
        mv.visitInsn(Opcodes.DUP2);
        mv.loadLocal(loc2);
        mv.visitInsn(Opcodes.DUP2_X2);
        mv.visitLdcInsn(opcode);
        mv.visitMethodInsn(Opcodes.INVOKESTATIC, CHECKER, "overflowDistance", "(JJI)I", false);

        insertBranchWithoutException(Opcodes.IFGE);
        break;
    }

}

From source file:org.evosuite.instrumentation.error.VectorInstrumentation.java

License:Open Source License

@Override
public void visitMethodInsn(int opcode, String owner, String name, String desc, boolean itf) {
    if (owner.equals(VECTORNAME)) {
        if (emptyListMethods.contains(name)) {
            // empty
            Map<Integer, Integer> tempVariables = getMethodCallee(desc);

            //tagBranchStart();
            mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, VECTORNAME, "isEmpty", "()Z", false);
            insertBranch(Opcodes.IFLE, "java/util/NoSuchElementException");
            // tagBranchEnd();
            restoreMethodParameters(tempVariables, desc);

        } else if (indexListMethods.contains(name)) {
            Type[] args = Type.getArgumentTypes(desc);
            if (args.length == 0)
                return;
            if (!args[0].equals(Type.INT_TYPE))
                return;

            Map<Integer, Integer> tempVariables = getMethodCallee(desc);
            tagBranchStart();/*from  w w w.j  a  v  a2  s.c  om*/
            mv.visitMethodInsn(Opcodes.INVOKEVIRTUAL, VECTORNAME, "size", "()I", false);

            // index >= size
            mv.loadLocal(tempVariables.get(0));
            insertBranch(Opcodes.IF_ICMPGT, "java/lang/IndexOutOfBoundsException");

            // index < 0
            mv.loadLocal(tempVariables.get(0));
            insertBranch(Opcodes.IFGE, "java/lang/IndexOutOfBoundsException");
            tagBranchEnd();

            restoreMethodParameters(tempVariables, desc);
        }
    }
}

From source file:org.evosuite.instrumentation.mutation.ReplaceComparisonOperator.java

License:Open Source License

private String getOp(int opcode) {
    switch (opcode) {
    case Opcodes.IFEQ:
    case Opcodes.IF_ACMPEQ:
    case Opcodes.IF_ICMPEQ:
        return "==";
    case Opcodes.IFNE:
    case Opcodes.IF_ACMPNE:
    case Opcodes.IF_ICMPNE:
        return "!=";
    case Opcodes.IFLT:
    case Opcodes.IF_ICMPLT:
        return "<";
    case Opcodes.IFLE:
    case Opcodes.IF_ICMPLE:
        return "<=";
    case Opcodes.IFGT:
    case Opcodes.IF_ICMPGT:
        return ">";
    case Opcodes.IFGE:
    case Opcodes.IF_ICMPGE:
        return ">=";
    case Opcodes.IFNULL:
        return "= null";
    case Opcodes.IFNONNULL:
        return "!= null";
    }//  ww w  .  ja v  a2 s. co m
    throw new RuntimeException("Unknown opcode: " + opcode);
}

From source file:org.evosuite.instrumentation.mutation.ReplaceComparisonOperator.java

License:Open Source License

/**
 * <p>getInfectionDistance</p>
 *
 * @param opcodeOrig a int./*from ww  w  . j  ava 2 s  .  c  om*/
 * @param opcodeNew a int.
 * @return a {@link org.objectweb.asm.tree.InsnList} object.
 */
public InsnList getInfectionDistance(int opcodeOrig, int opcodeNew) {
    InsnList distance = new InsnList();
    switch (opcodeOrig) {
    case Opcodes.IF_ICMPEQ:
    case Opcodes.IF_ICMPNE:
    case Opcodes.IF_ICMPLE:
    case Opcodes.IF_ICMPLT:
    case Opcodes.IF_ICMPGE:
    case Opcodes.IF_ICMPGT:
        distance.add(new InsnNode(Opcodes.DUP2));
        distance.add(new LdcInsnNode(opcodeOrig));
        distance.add(new LdcInsnNode(opcodeNew));
        distance.add(new MethodInsnNode(Opcodes.INVOKESTATIC,
                PackageInfo.getNameWithSlash(ReplaceComparisonOperator.class), "getInfectionDistance",
                "(IIII)D", false));
        break;

    case Opcodes.IFEQ:
    case Opcodes.IFNE:
    case Opcodes.IFLE:
    case Opcodes.IFLT:
    case Opcodes.IFGE:
    case Opcodes.IFGT:
        distance.add(new InsnNode(Opcodes.DUP));
        distance.add(new LdcInsnNode(opcodeOrig));
        distance.add(new LdcInsnNode(opcodeNew));
        distance.add(new MethodInsnNode(Opcodes.INVOKESTATIC,
                PackageInfo.getNameWithSlash(ReplaceComparisonOperator.class), "getInfectionDistance", "(III)D",
                false));
        break;

    default:
        distance.add(new LdcInsnNode(0.0));
    }

    return distance;
}

From source file:org.evosuite.instrumentation.mutation.ReplaceComparisonOperator.java

License:Open Source License

/**
 * <p>getInfectionDistance</p>
 *
 * @param intVal a int.//from www .j a v  a 2s.co m
 * @param opcodeOrig a int.
 * @param opcodeNew a int.
 * @return a double.
 */
public static double getInfectionDistance(int intVal, int opcodeOrig, int opcodeNew) {
    long val = intVal;
    switch (opcodeOrig) {
    case Opcodes.IFLT:
        switch (opcodeNew) {
        case Opcodes.IFLE:
            // Only differs for val == 0
            return Math.abs(val);
        case Opcodes.IFEQ:
            // Only differs for val <= 0
            return val > 0 ? val : 0.0;
        case Opcodes.IFGT:
            // Only same for val == 0
            return val == 0 ? 1.0 : 0.0;
        case Opcodes.IFGE:
            // Always differs
            return 0.0;
        case Opcodes.IFNE:
            // Only differs for val > 0
            return val <= 0 ? Math.abs(val) + 1.0 : 0.0;
        case TRUE:
            return val < 0 ? 1.0 : 0.0;
        case FALSE:
            return val < 0 ? 0.0 : 1.0;
        }
    case Opcodes.IFLE:
        switch (opcodeNew) {
        case Opcodes.IFLT:
            // Only differs for val == 0
            return Math.abs(val);
        case Opcodes.IFEQ:
            return val >= 0 ? val + 1.0 : 0.0;
        case Opcodes.IFGE:
            // Only equals for val == 0
            return val == 0 ? 1.0 : 0.0;
        case Opcodes.IFGT:
            // Always differs
            return 0.0;
        case Opcodes.IFNE:
            // Only differs if val >= 0
            return val < 0 ? Math.abs(val) : 0.0;
        case TRUE:
            return val <= 0 ? 1.0 : 0.0;
        case FALSE:
            return val <= 0 ? 0.0 : 1.0;
        }
    case Opcodes.IFGT:
        switch (opcodeNew) {
        case Opcodes.IFGE:
            // Only differs for val == 0
            return Math.abs(val);
        case Opcodes.IFEQ:
            // Only differs for val >= 0
            return val < 0 ? Math.abs(val) : 0.0;
        case Opcodes.IFLT:
            // Only same for val == 0
            return val == 0 ? 1.0 : 0.0;
        case Opcodes.IFLE:
            // Always differs
            return 0.0;
        case Opcodes.IFNE:
            // Only differs for val < 0
            return val >= 0 ? val + 1.0 : 0.0;
        case TRUE:
            return val > 0 ? 1.0 : 0.0;
        case FALSE:
            return val > 0 ? 0.0 : 1.0;
        }
    case Opcodes.IFGE:
        switch (opcodeNew) {
        case Opcodes.IFGT:
            // Only differs for val == 0
            return Math.abs(val);
        case Opcodes.IFEQ:
            return val <= 0 ? Math.abs(val) + 1.0 : 0.0;
        case Opcodes.IFLE:
            // Only equals for val == 0
            return val == 0 ? 1.0 : 0.0;
        case Opcodes.IFLT:
            // Always differs
            return 0.0;
        case Opcodes.IFNE:
            // Only differs if val > 0
            return val > 0 ? val : 0.0;
        case TRUE:
            return val >= 0 ? 1.0 : 0.0;
        case FALSE:
            return val >= 0 ? 0.0 : 1.0;
        }
    case Opcodes.IFEQ:
        switch (opcodeNew) {
        case Opcodes.IFLT:
            // Only differs if val <= 0
            return val > 0 ? val : 0.0;
        case Opcodes.IFGT:
            // Only differs if val >= 0
            return val < 0 ? Math.abs(val) : 0.0;
        case Opcodes.IFNE:
            // Always differs
            return 0.0;
        case Opcodes.IFLE:
            return val >= 0 ? val + 1.0 : 0.0;
        case Opcodes.IFGE:
            return val <= 0 ? Math.abs(val) + 1.0 : 0.0;
        case TRUE:
            return val == 0 ? 1.0 : 0.0;
        case FALSE:
            return val == 0 ? 0.0 : 1.0;
        }
    case Opcodes.IFNE:
        switch (opcodeNew) {
        case Opcodes.IFEQ:
            return 0.0;
        case Opcodes.IFLT:
            // Only differs for val > 0
            return val <= 0 ? Math.abs(val) + 1.0 : 0.0;
        case Opcodes.IFLE:
            // Only differs for val > 0
            return val < 0 ? Math.abs(val) : 0.0;
        case Opcodes.IFGT:
            return val >= 0 ? val + 1.0 : 0.0;
        case Opcodes.IFGE:
            return val > 0 ? val : 0.0;
        case TRUE:
            return val != 0 ? 1.0 : 0.0;
        case FALSE:
            return val != 0 ? 0.0 : 1.0;
        }

    }

    throw new RuntimeException("Unknown operator replacement: " + opcodeOrig + " -> " + opcodeNew);
}

From source file:org.evosuite.instrumentation.mutation.ReplaceComparisonOperator.java

License:Open Source License

private int getBooleanIntReplacement(int opcode) {
    logger.debug("Getting Boolean int replacement");
    switch (opcode) {
    case Opcodes.IFEQ:
        return Opcodes.IFNE;
    case Opcodes.IFNE:
        return Opcodes.IFEQ;
    case Opcodes.IFGT:
        return Opcodes.IFEQ;
    case Opcodes.IFLE:
        return Opcodes.IFGT;
    // The rest should not occur except if our interpreter did something wrong
    case Opcodes.IFGE:
        return Opcodes.IFLT;
    case Opcodes.IFLT:
        return Opcodes.IFGE;
    }//from   w w  w.j a va  2s.c  o m
    throw new RuntimeException("Illegal opcode received: " + opcode);
}