Example usage for org.objectweb.asm Opcodes TOP

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

Introduction

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

Prototype

Integer TOP

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

Click Source Link

Usage

From source file:org.jacoco.core.internal.instr.FrameTracker.java

License:Open Source License

@Override
public void visitInsn(final int opcode) {
    final Object t1, t2, t3, t4;
    switch (opcode) {
    case Opcodes.NOP:
    case Opcodes.RETURN:
        break;/*w w w  .j  a  v a  2  s  . c  om*/
    case Opcodes.ARETURN:
    case Opcodes.ATHROW:
    case Opcodes.FRETURN:
    case Opcodes.IRETURN:
    case Opcodes.MONITORENTER:
    case Opcodes.MONITOREXIT:
    case Opcodes.POP:
        pop(1);
        break;
    case Opcodes.DRETURN:
    case Opcodes.LRETURN:
    case Opcodes.POP2:
        pop(2);
        break;
    case Opcodes.AASTORE:
    case Opcodes.BASTORE:
    case Opcodes.CASTORE:
    case Opcodes.FASTORE:
    case Opcodes.IASTORE:
    case Opcodes.SASTORE:
        pop(3);
        break;
    case Opcodes.LASTORE:
    case Opcodes.DASTORE:
        pop(4);
        break;
    case Opcodes.ICONST_M1:
    case Opcodes.ICONST_0:
    case Opcodes.ICONST_1:
    case Opcodes.ICONST_2:
    case Opcodes.ICONST_3:
    case Opcodes.ICONST_4:
    case Opcodes.ICONST_5:
        push(Opcodes.INTEGER);
        break;
    case Opcodes.ARRAYLENGTH:
    case Opcodes.F2I:
    case Opcodes.I2B:
    case Opcodes.I2C:
    case Opcodes.I2S:
    case Opcodes.INEG:
        pop(1);
        push(Opcodes.INTEGER);
        break;
    case Opcodes.BALOAD:
    case Opcodes.CALOAD:
    case Opcodes.D2I:
    case Opcodes.FCMPG:
    case Opcodes.FCMPL:
    case Opcodes.IADD:
    case Opcodes.IALOAD:
    case Opcodes.IAND:
    case Opcodes.IDIV:
    case Opcodes.IMUL:
    case Opcodes.IOR:
    case Opcodes.IREM:
    case Opcodes.ISHL:
    case Opcodes.ISHR:
    case Opcodes.ISUB:
    case Opcodes.IUSHR:
    case Opcodes.IXOR:
    case Opcodes.L2I:
    case Opcodes.SALOAD:
        pop(2);
        push(Opcodes.INTEGER);
        break;
    case Opcodes.DCMPG:
    case Opcodes.DCMPL:
    case Opcodes.LCMP:
        pop(4);
        push(Opcodes.INTEGER);
        break;
    case Opcodes.FCONST_0:
    case Opcodes.FCONST_1:
    case Opcodes.FCONST_2:
        push(Opcodes.FLOAT);
        break;
    case Opcodes.FNEG:
    case Opcodes.I2F:
        pop(1);
        push(Opcodes.FLOAT);
        break;
    case Opcodes.D2F:
    case Opcodes.FADD:
    case Opcodes.FALOAD:
    case Opcodes.FDIV:
    case Opcodes.FMUL:
    case Opcodes.FREM:
    case Opcodes.FSUB:
    case Opcodes.L2F:
        pop(2);
        push(Opcodes.FLOAT);
        break;
    case Opcodes.LCONST_0:
    case Opcodes.LCONST_1:
        push(Opcodes.LONG);
        push(Opcodes.TOP);
        break;
    case Opcodes.F2L:
    case Opcodes.I2L:
        pop(1);
        push(Opcodes.LONG);
        push(Opcodes.TOP);
        break;
    case Opcodes.D2L:
    case Opcodes.LALOAD:
    case Opcodes.LNEG:
        pop(2);
        push(Opcodes.LONG);
        push(Opcodes.TOP);
        break;
    case Opcodes.LSHL:
    case Opcodes.LSHR:
    case Opcodes.LUSHR:
        pop(3);
        push(Opcodes.LONG);
        push(Opcodes.TOP);
        break;
    case Opcodes.LADD:
    case Opcodes.LAND:
    case Opcodes.LDIV:
    case Opcodes.LMUL:
    case Opcodes.LOR:
    case Opcodes.LREM:
    case Opcodes.LSUB:
    case Opcodes.LXOR:
        pop(4);
        push(Opcodes.LONG);
        push(Opcodes.TOP);
        break;
    case Opcodes.DCONST_0:
    case Opcodes.DCONST_1:
        push(Opcodes.DOUBLE);
        push(Opcodes.TOP);
        break;
    case Opcodes.F2D:
    case Opcodes.I2D:
        pop(1);
        push(Opcodes.DOUBLE);
        push(Opcodes.TOP);
        break;
    case Opcodes.DALOAD:
    case Opcodes.DNEG:
    case Opcodes.L2D:
        pop(2);
        push(Opcodes.DOUBLE);
        push(Opcodes.TOP);
        break;
    case Opcodes.DADD:
    case Opcodes.DDIV:
    case Opcodes.DMUL:
    case Opcodes.DREM:
    case Opcodes.DSUB:
        pop(4);
        push(Opcodes.DOUBLE);
        push(Opcodes.TOP);
        break;
    case Opcodes.ACONST_NULL:
        push(Opcodes.NULL);
        break;
    case Opcodes.AALOAD:
        pop(1);
        t1 = pop();
        push(Type.getType(((String) t1).substring(1)));
        break;
    case Opcodes.DUP:
        t1 = pop();
        push(t1);
        push(t1);
        break;
    case Opcodes.DUP_X1:
        t1 = pop();
        t2 = pop();
        push(t1);
        push(t2);
        push(t1);
        break;
    case Opcodes.DUP_X2:
        t1 = pop();
        t2 = pop();
        t3 = pop();
        push(t1);
        push(t3);
        push(t2);
        push(t1);
        break;
    case Opcodes.DUP2:
        t1 = pop();
        t2 = pop();
        push(t2);
        push(t1);
        push(t2);
        push(t1);
        break;
    case Opcodes.DUP2_X1:
        t1 = pop();
        t2 = pop();
        t3 = pop();
        push(t2);
        push(t1);
        push(t3);
        push(t2);
        push(t1);
        break;
    case Opcodes.DUP2_X2:
        t1 = pop();
        t2 = pop();
        t3 = pop();
        t4 = pop();
        push(t2);
        push(t1);
        push(t4);
        push(t3);
        push(t2);
        push(t1);
        break;
    case Opcodes.SWAP:
        t1 = pop();
        t2 = pop();
        push(t1);
        push(t2);
        break;
    default:
        throw new IllegalArgumentException();
    }
    mv.visitInsn(opcode);
}

From source file:org.jacoco.core.internal.instr.FrameTracker.java

License:Open Source License

@Override
public void visitVarInsn(final int opcode, final int var) {
    final Object t;
    switch (opcode) {
    case Opcodes.ALOAD:
        push(get(var));
        break;//ww  w  .  java 2s .  co m
    case Opcodes.ILOAD:
        push(Opcodes.INTEGER);
        break;
    case Opcodes.FLOAD:
        push(Opcodes.FLOAT);
        break;
    case Opcodes.LLOAD:
        push(Opcodes.LONG);
        push(Opcodes.TOP);
        break;
    case Opcodes.DLOAD:
        push(Opcodes.DOUBLE);
        push(Opcodes.TOP);
        break;
    case Opcodes.ASTORE:
    case Opcodes.ISTORE:
    case Opcodes.FSTORE:
        t = pop();
        set(var, t);
        break;
    case Opcodes.LSTORE:
    case Opcodes.DSTORE:
        pop(1);
        t = pop();
        set(var, t);
        set(var + 1, Opcodes.TOP);
        break;
    default:
        throw new IllegalArgumentException();
    }
    mv.visitVarInsn(opcode, var);
}

From source file:org.jacoco.core.internal.instr.FrameTracker.java

License:Open Source License

@Override
public void visitLdcInsn(final Object cst) {
    if (cst instanceof Integer) {
        push(Opcodes.INTEGER);/* ww  w  . ja v a 2s . c o  m*/
    } else if (cst instanceof Float) {
        push(Opcodes.FLOAT);
    } else if (cst instanceof Long) {
        push(Opcodes.LONG);
        push(Opcodes.TOP);
    } else if (cst instanceof Double) {
        push(Opcodes.DOUBLE);
        push(Opcodes.TOP);
    } else if (cst instanceof String) {
        push("java/lang/String");
    } else if (cst instanceof Type) {
        push("java/lang/Class");
    } else {
        throw new IllegalArgumentException();
    }
    mv.visitLdcInsn(cst);
}

From source file:org.jacoco.core.internal.instr.FrameTracker.java

License:Open Source License

private void push(final Type type) {
    switch (type.getSort()) {
    case Type.VOID:
        break;/*from   w w w. j a  va2s.co  m*/
    case Type.BOOLEAN:
    case Type.BYTE:
    case Type.CHAR:
    case Type.INT:
    case Type.SHORT:
        push(Opcodes.INTEGER);
        break;
    case Type.FLOAT:
        push(Opcodes.FLOAT);
        break;
    case Type.LONG:
        push(Opcodes.LONG);
        push(Opcodes.TOP);
        break;
    case Type.DOUBLE:
        push(Opcodes.DOUBLE);
        push(Opcodes.TOP);
        break;
    case Type.ARRAY:
    case Type.OBJECT:
        push(type.getInternalName());
        break;
    default:
        throw new AssertionError(type);
    }
}

From source file:org.jacoco.core.internal.instr.FrameTracker.java

License:Open Source License

private void set(final int pos, final Object type) {
    local = ensureSize(local, pos + 1);//from w  w  w  .j  ava 2  s .  c  om
    // fill gaps:
    for (int i = localSize; i < pos; i++) {
        local[i] = Opcodes.TOP;
    }
    localSize = Math.max(localSize, pos + 1);
    local[pos] = type;
}

From source file:org.jacoco.core.internal.instr.FrameTracker.java

License:Open Source License

private void set(final int pos, final Type type) {
    switch (type.getSort()) {
    case Type.BOOLEAN:
    case Type.BYTE:
    case Type.CHAR:
    case Type.INT:
    case Type.SHORT:
        set(pos, Opcodes.INTEGER);//  w w  w  . j  a  va 2s  . c  o  m
        break;
    case Type.FLOAT:
        set(pos, Opcodes.FLOAT);
        break;
    case Type.LONG:
        set(pos, Opcodes.LONG);
        set(pos + 1, Opcodes.TOP);
        break;
    case Type.DOUBLE:
        set(pos, Opcodes.DOUBLE);
        set(pos + 1, Opcodes.TOP);
        break;
    case Type.ARRAY:
    case Type.OBJECT:
        set(pos, type.getInternalName());
        break;
    default:
        throw new AssertionError(type);
    }
}

From source file:org.jacoco.core.internal.instr.FrameTracker.java

License:Open Source License

/**
 * Expand double word types into two slots.
 *///from w  w  w .j av a 2 s.co m
private int expand(final Object[] source, final int size, final Object[] target) {
    int targetIdx = 0;
    for (int sourceIdx = 0; sourceIdx < size; sourceIdx++) {
        final Object type = source[sourceIdx];
        target[targetIdx++] = type;
        if (type == Opcodes.LONG || type == Opcodes.DOUBLE) {
            target[targetIdx++] = Opcodes.TOP;
        }
    }
    return targetIdx;
}

From source file:org.jacoco.core.internal.instr.ProbeInserter.java

License:Open Source License

@Override
public final void visitFrame(final int type, final int nLocal, final Object[] local, final int nStack,
        final Object[] stack) {

    if (type != Opcodes.F_NEW) { // uncompressed frame
        throw new IllegalArgumentException("ClassReader.accept() should be called with EXPAND_FRAMES flag");
    }// w  w  w .  jav  a 2s. c  o  m

    final Object[] newLocal = new Object[Math.max(nLocal, variable) + 1];
    int idx = 0; // Arrays index for existing locals
    int newIdx = 0; // Array index for new locals
    int pos = 0; // Current variable position
    while (idx < nLocal || pos <= variable) {
        if (pos == variable) {
            newLocal[newIdx++] = InstrSupport.DATAFIELD_DESC;
            pos++;
        } else {
            if (idx < nLocal) {
                final Object t = local[idx++];
                newLocal[newIdx++] = t;
                pos++;
                if (t == Opcodes.LONG || t == Opcodes.DOUBLE) {
                    pos++;
                }
            } else {
                // Fill unused slots with TOP
                newLocal[newIdx++] = Opcodes.TOP;
                pos++;
            }
        }
    }
    mv.visitFrame(type, newIdx, newLocal, nStack, stack);
}

From source file:org.jacoco.core.internal.instr.ProbeInserterTest.java

License:Open Source License

@Test
public void testFillOneWord() {
    ProbeInserter pi = new ProbeInserter(Opcodes.ACC_STATIC, "(I)V", actualVisitor, arrayStrategy);

    pi.visitFrame(Opcodes.F_NEW, 0, new Object[] {}, 0, new Object[] {});

    // The locals in this frame are filled with TOP up to the probe variable
    expectedVisitor.visitFrame(Opcodes.F_NEW, 2, new Object[] { Opcodes.TOP, "[Z", }, 0, new Object[] {});
}

From source file:org.jacoco.core.internal.instr.ProbeInserterTest.java

License:Open Source License

@Test
public void testFillTwoWord() {
    ProbeInserter pi = new ProbeInserter(Opcodes.ACC_STATIC, "(J)V", actualVisitor, arrayStrategy);

    pi.visitFrame(Opcodes.F_NEW, 0, new Object[] {}, 0, new Object[] {});

    // The locals in this frame are filled with TOP up to the probe variable
    expectedVisitor.visitFrame(Opcodes.F_NEW, 3, new Object[] { Opcodes.TOP, Opcodes.TOP, "[Z", }, 0,
            new Object[] {});
}