Example usage for org.objectweb.asm MethodVisitor visitVarInsn

List of usage examples for org.objectweb.asm MethodVisitor visitVarInsn

Introduction

In this page you can find the example usage for org.objectweb.asm MethodVisitor visitVarInsn.

Prototype

public void visitVarInsn(final int opcode, final int var) 

Source Link

Document

Visits a local variable instruction.

Usage

From source file:br.usp.each.saeg.badua.core.internal.instr.IntegerRootProbe.java

License:Open Source License

@Override
public void accept(final MethodVisitor mv) {
    if (born != 0) {
        InstrSupport.push(mv, (int) born);
        mv.visitVarInsn(Opcodes.ISTORE, vAlive);
    }/*  w  w  w  .j  a  v  a2s .c o  m*/
    if (sleepy != 0) {
        InstrSupport.push(mv, ~(int) sleepy);
        mv.visitVarInsn(Opcodes.ISTORE, vSleepy);
    }
}

From source file:br.usp.each.saeg.badua.core.internal.instr.IntegerUpdateProbe.java

License:Open Source License

@Override
public void accept(final MethodVisitor mv) {
    mv.visitVarInsn(Opcodes.ILOAD, vCovered);
    mv.visitInsn(Opcodes.I2L);/*from w ww  . ja va2s .c  o  m*/
    mv.visitMethodInsn(Opcodes.INVOKESTATIC, owner, InstrSupport.DATAMETHOD_NAME, InstrSupport.DATAMETHOD_DESC,
            false);
    InstrSupport.push(mv, index);
    mv.visitInsn(Opcodes.DUP2_X2);
    mv.visitInsn(Opcodes.LALOAD);
    mv.visitInsn(Opcodes.LOR);
    mv.visitInsn(Opcodes.LASTORE);
}

From source file:br.usp.each.saeg.badua.core.internal.instr.LongInitProbe.java

License:Open Source License

@Override
public void accept(final MethodVisitor mv) {
    mv.visitInsn(Opcodes.LCONST_0);// w  w w .j  ava 2s .co  m
    mv.visitVarInsn(Opcodes.LSTORE, vCovered);
    mv.visitInsn(Opcodes.LCONST_0);
    mv.visitVarInsn(Opcodes.LSTORE, vAlive);
    mv.visitLdcInsn(-1L);
    mv.visitVarInsn(Opcodes.LSTORE, vSleepy);
}

From source file:br.usp.each.saeg.badua.core.internal.instr.LongProbe.java

License:Open Source License

@Override
public void accept(final MethodVisitor mv) {

    // update covered
    if (potcov != 0) {
        mv.visitVarInsn(Opcodes.LLOAD, vAlive);

        if (!singlePredecessor && potcovpuse != 0) {
            mv.visitVarInsn(Opcodes.LLOAD, vSleepy);
            mv.visitInsn(Opcodes.LAND);// w  ww  .  j a v  a2 s  .  c  om
        }

        mv.visitLdcInsn(potcov);
        mv.visitInsn(Opcodes.LAND);
        mv.visitVarInsn(Opcodes.LLOAD, vCovered);
        mv.visitInsn(Opcodes.LOR);
        mv.visitVarInsn(Opcodes.LSTORE, vCovered);
    }

    // update alive
    if (disabled != 0) {
        mv.visitLdcInsn(~disabled);
        mv.visitVarInsn(Opcodes.LLOAD, vAlive);
        mv.visitInsn(Opcodes.LAND);
    }
    if (born != 0) {
        if (disabled == 0) {
            mv.visitVarInsn(Opcodes.LLOAD, vAlive);
        }
        mv.visitLdcInsn(born);
        mv.visitInsn(Opcodes.LOR);
    }
    if (disabled != 0 || born != 0) {
        mv.visitVarInsn(Opcodes.LSTORE, vAlive);
    }

    // update sleepy
    if (sleepy != 0) {
        mv.visitLdcInsn(~sleepy);
    } else {
        mv.visitLdcInsn(-1L);
    }
    mv.visitVarInsn(Opcodes.LSTORE, vSleepy);
}

From source file:br.usp.each.saeg.badua.core.internal.instr.LongRootProbe.java

License:Open Source License

@Override
public void accept(final MethodVisitor mv) {
    if (born != 0) {
        mv.visitLdcInsn(born);//from  w  ww .j  a  v  a 2 s . c om
        mv.visitVarInsn(Opcodes.LSTORE, vAlive);
    }
    if (sleepy != 0) {
        mv.visitLdcInsn(~sleepy);
        mv.visitVarInsn(Opcodes.LSTORE, vSleepy);
    }
}

From source file:br.usp.each.saeg.badua.core.internal.instr.LongUpdateProbe.java

License:Open Source License

@Override
public void accept(final MethodVisitor mv) {
    mv.visitVarInsn(Opcodes.LLOAD, vCovered);
    mv.visitMethodInsn(Opcodes.INVOKESTATIC, owner, InstrSupport.DATAMETHOD_NAME, InstrSupport.DATAMETHOD_DESC,
            false);/* w w w .j a  v  a2s .c o  m*/
    InstrSupport.push(mv, index);
    mv.visitInsn(Opcodes.DUP2_X2);
    mv.visitInsn(Opcodes.LALOAD);
    mv.visitInsn(Opcodes.LOR);
    mv.visitInsn(Opcodes.LASTORE);
}

From source file:br.usp.each.saeg.badua.test.validation.MaxTest.java

License:Open Source License

@Override
@Before// w w  w.j a  v a2 s . c  o  m
public void setUp() throws Exception {
    super.setUp();

    final int classVersion = Opcodes.V1_6;
    final int classAccessor = Opcodes.ACC_PUBLIC | Opcodes.ACC_SUPER;
    final String className = "Max";
    final String superName = "java/lang/Object";

    final int methodAccessor = Opcodes.ACC_PUBLIC | Opcodes.ACC_STATIC;
    final String methodName = "max";
    final String methodDesc = "([II)I";

    final ClassWriter cw = new ClassWriter(0);
    final MethodVisitor mw;

    cw.visit(classVersion, classAccessor, className, null, superName, null);
    mw = cw.visitMethod(methodAccessor, methodName, methodDesc, null, null);
    mw.visitCode();
    // block 0 (definitions {0, 1, 2, 3})
    mw.visitInsn(Opcodes.ICONST_0);
    mw.visitVarInsn(Opcodes.ISTORE, 2);
    mw.visitVarInsn(Opcodes.ALOAD, 0);
    mw.visitVarInsn(Opcodes.ILOAD, 2);
    mw.visitIincInsn(2, 1);
    mw.visitInsn(Opcodes.IALOAD);
    mw.visitVarInsn(Opcodes.ISTORE, 3);
    // block 1 (p-uses {1, 2})
    final Label backLoop = new Label();
    mw.visitLabel(backLoop);
    mw.visitVarInsn(Opcodes.ILOAD, 2);
    mw.visitVarInsn(Opcodes.ILOAD, 1);
    final Label breakLoop = new Label();
    mw.visitJumpInsn(Opcodes.IF_ICMPGE, breakLoop);
    // block 3 (p-uses {0, 2, 3})
    mw.visitVarInsn(Opcodes.ALOAD, 0);
    mw.visitVarInsn(Opcodes.ILOAD, 2);
    mw.visitInsn(Opcodes.IALOAD);
    mw.visitVarInsn(Opcodes.ILOAD, 3);
    final Label jump = new Label();
    mw.visitJumpInsn(Opcodes.IF_ICMPLE, jump);
    // block 5 (definitions {3}, uses {0, 2})
    mw.visitVarInsn(Opcodes.ALOAD, 0);
    mw.visitVarInsn(Opcodes.ILOAD, 2);
    mw.visitInsn(Opcodes.IALOAD);
    mw.visitVarInsn(Opcodes.ISTORE, 3);
    // block 4 (definitions {2}, uses {2})
    mw.visitLabel(jump);
    mw.visitIincInsn(2, 1);
    mw.visitJumpInsn(Opcodes.GOTO, backLoop);
    // block 2 ( uses {3})
    mw.visitLabel(breakLoop);
    mw.visitVarInsn(Opcodes.ILOAD, 3);
    mw.visitInsn(Opcodes.IRETURN);
    mw.visitMaxs(2, 4);
    mw.visitEnd();
    cw.visitEnd();

    final byte[] bytes = cw.toByteArray();
    klass = addClass(className, bytes);
    method = klass.getMethod(methodName, int[].class, int.class);
    classId = CRC64.checksum(bytes);

    RT.init(new RuntimeData());
}

From source file:cc.adf.metrics.agent.visitor.ApplicationModuleImplModifier.java

public static void addDetailNameMethod(ClassWriter cw) {
    MethodVisitor mv = cw.visitMethod(ACC_PRIVATE, "getDetailName", "()Ljava/lang/String;", null, null);
    mv.visitCode();//  w  w  w . j ava  2s.c o  m
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKEVIRTUAL, "oracle/jbo/server/ApplicationModuleImpl", "isRoot", "()Z", false);
    Label l0 = new Label();
    mv.visitJumpInsn(IFEQ, l0);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKESPECIAL, "oracle/jbo/server/ApplicationModuleImpl", "getName",
            "()Ljava/lang/String;", false);
    mv.visitInsn(ARETURN);
    mv.visitLabel(l0);
    mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
    mv.visitTypeInsn(NEW, "java/lang/StringBuilder");
    mv.visitInsn(DUP);
    mv.visitMethodInsn(INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "()V", false);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKESPECIAL, "oracle/jbo/server/ApplicationModuleImpl", "getRootApplicationModule",
            "()Loracle/jbo/server/ApplicationModuleImpl;", false);
    mv.visitMethodInsn(INVOKEVIRTUAL, "oracle/jbo/server/ApplicationModuleImpl", "getName",
            "()Ljava/lang/String;", false);
    mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
            "(Ljava/lang/String;)Ljava/lang/StringBuilder;", false);
    mv.visitLdcInsn("::");
    mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
            "(Ljava/lang/String;)Ljava/lang/StringBuilder;", false);
    mv.visitVarInsn(ALOAD, 0);
    mv.visitMethodInsn(INVOKESPECIAL, "oracle/jbo/server/ApplicationModuleImpl", "getName",
            "()Ljava/lang/String;", false);
    mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append",
            "(Ljava/lang/String;)Ljava/lang/StringBuilder;", false);
    mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;", false);
    mv.visitInsn(ARETURN);
    mv.visitMaxs(2, 1);
    mv.visitEnd();
}

From source file:ch.eiafr.cojac.instrumenters.FloatProxyMethod.java

License:Apache License

public void nativeCall(MethodVisitor mv, int access, String owner, String name, String desc) {
    boolean isStatic = (access & ACC_STATIC) > 0;
    String newDesc = replaceFloatMethodDescription(desc);
    MethodVisitor newMv = ccv.addProxyMethod(access & ~ACC_NATIVE, name, newDesc, null, null);
    int varIndex = 0;
    int opcode = INVOKESTATIC;
    if (!isStatic) {
        newMv.visitVarInsn(ALOAD, 0);
        varIndex = 1;/*  w  ww. j a v  a  2  s.  c  om*/
        opcode = INVOKEVIRTUAL;
    }
    ConversionContext cc = new ConversionContext(opcode, owner, name, desc);
    Type args[] = Type.getArgumentTypes(newDesc);
    for (Type type : args) {
        newMv.visitVarInsn(getLoadOpcode(type), varIndex);
        varIndex += type.getSize();
    }
    convertArgumentsToReal(mv, cc);
    // stack >> [target] allParamsArr [target] allParamsArr
    maybeConvertTarget(mv, cc.opcode, cc.owner);
    // stack >> [target] allParamsArr [newTarget] allParamsArr
    explodeOnStack(mv, cc, true);
    // stack >> [target] allParamsArr [newTarget] nprm0 nprm1 nprm2...
    newMv.visitMethodInsn(opcode, owner, name, desc, false);
    // stack >> [target] allParamsArr [possibleResult]
    checkArraysAfterCall(newMv, cc.convertedArrays, desc);
    // stack >> [target] [possibleResult]
    convertReturnType(newMv, desc);
    // stack >> [target] [newPossibleResult]
    newMv.visitInsn(afterFloatReplacement(Type.getReturnType(desc)).getOpcode(IRETURN));
    // stack >> [target]       // left on the stack... not a problem!
    newMv.visitMaxs(0, 0);
}

From source file:ch.eiafr.cojac.instrumenters.FloatProxyMethod.java

License:Apache License

private void createConvertMethod(String convertDesc, ConversionContext cc) {
    if (ccv.isProxyMethod(COJAC_TYPE_CONVERT_NAME, convertDesc))
        return; // the method already exists
    MethodVisitor newMv = ccv.addProxyMethod(ACC_STATIC, COJAC_TYPE_CONVERT_NAME, convertDesc, null, null);
    int varIndex = 0;
    newMv.visitLdcInsn(cc.outArgs.length + 1); // additional cell for the AllAsObjects array
    newMv.visitTypeInsn(ANEWARRAY, OBJ_TYPE.getInternalName());
    // stack >> prmsArr
    newMv.visitInsn(DUP);//from w w  w. ja  v a  2  s. c om
    newMv.visitLdcInsn(cc.outArgs.length);
    newMv.visitInsn(DUP);
    newMv.visitTypeInsn(ANEWARRAY, OBJ_TYPE.getInternalName());
    // stack >> prmsArr prmsArr n asObjArr
    newMv.visitInsn(AASTORE);
    // stack >> prmsArr

    for (int i = 0; i < cc.outArgs.length; i++) {
        Type ia = cc.inArgs[i];
        newMv.visitInsn(DUP);
        newMv.visitInsn(DUP);
        newMv.visitLdcInsn(cc.outArgs.length);
        // stack >> prmsArr prmsArr prmsArr n
        newMv.visitInsn(AALOAD);
        newMv.visitTypeInsn(CHECKCAST, "[" + OBJ_TYPE.getDescriptor());
        // stack >> prmsArr prmsArr asObjArr
        newMv.visitLdcInsn(i);
        // stack >> prmsArr prmsArr asObjArr i
        newMv.visitVarInsn(getLoadOpcode(ia), varIndex);
        convertPrimitiveToObject(newMv, cc.inArgs[i]);
        // stack >> prmsArr prmsArr asObjArr i pi
        newMv.visitInsn(AASTORE);
        // stack >> prmsArr prmsArr
        newMv.visitLdcInsn(i);
        // stack >> prmsArr prmsArr i
        newMv.visitVarInsn(getLoadOpcode(ia), varIndex);
        varIndex += cc.inArgs[i].getSize();
        // stack >> prmsArr prmsArr i pi
        boolean keepBothVersions = (ia.getSort() == Type.ARRAY);
        if (keepBothVersions) { // keep the old reference (the Cojac one)
            newMv.visitLdcInsn(2);
            newMv.visitTypeInsn(ANEWARRAY, OBJ_TYPE.getInternalName());
            // stack >> prmsArr prmsArr i pi piArr
            newMv.visitInsn(DUP_X1);
            // stack >> prmsArr prmsArr i piArr pi piArr
            newMv.visitInsn(SWAP);
            // stack >> prmsArr prmsArr i piArr piArr pi
            newMv.visitInsn(DUP_X1);
            newMv.visitLdcInsn(0);
            newMv.visitInsn(SWAP);
            // stack >> prmsArr prmsArr i piArr pi piArr pi 0
            newMv.visitInsn(AASTORE);
            // stack >> prmsArr prmsArr i piArr
        }
        // stack >> prmsArr prmsArr i pi
        if (cc.needsConversion(i)) {
            convertCojacToRealType(cc.asOriginalJavaType(i), newMv);
        } else if (cc.shouldObjParamBeConverted && (ia.equals(OBJ_TYPE) || ia.equals(OBJ_ARRAY_TYPE))) {
            convertObjectToReal(newMv, ia);
        }
        /* This is where we could decide to convert back to JavaWrapper
         * when the argument is declared as Object
         * We don't do that to keep "enriched numbers" in collections
         * but sometimes we would like to convert, eg printf, format...
         */
        convertPrimitiveToObject(newMv, cc.outArgs[i]);
        // stack >> prmsArr prmsArr i pi
        if (keepBothVersions) { // keep the new reference (the java one)
            newMv.visitInsn(SWAP);
            newMv.visitInsn(DUP_X1);
            newMv.visitInsn(SWAP);
            newMv.visitLdcInsn(1);
            newMv.visitInsn(SWAP);
            newMv.visitInsn(AASTORE);
        }
        // stack >> prmsArr prmsArr i pi
        newMv.visitInsn(AASTORE);
        // stack >> prmsArr
    }
    newMv.visitInsn(ARETURN);
    newMv.visitMaxs(0, 0);
}