Example usage for org.objectweb.asm Type DOUBLE_TYPE

List of usage examples for org.objectweb.asm Type DOUBLE_TYPE

Introduction

In this page you can find the example usage for org.objectweb.asm Type DOUBLE_TYPE.

Prototype

Type DOUBLE_TYPE

To view the source code for org.objectweb.asm Type DOUBLE_TYPE.

Click Source Link

Document

The double type.

Usage

From source file:boilerplate.processor.adapters.ToStringMethodInsertion.java

License:Open Source License

private static List<BytecodeGenerator> createMethodList() {
    final Type objectType = Type.getType(Object.class);
    class ObjectMethodInsn extends ToStringMethodInsertion {
        ObjectMethodInsn() {//  ww  w  . j av a  2s .co  m
            super(objectType, "appendObject",
                    "(Ljava/lang/StringBuilder;Ljava/lang/String;Ljava/lang/Object;)V");
        }

        @Override
        public boolean matches(Type type) {
            return true;
        }
    }

    BytecodeGenerator[] arr = {
            new ToStringMethodInsertion(Type.BOOLEAN_TYPE, "appendBoolean",
                    "(Ljava/lang/StringBuilder;Ljava/lang/String;Z)V"),
            new ToStringMethodInsertion(Type.BYTE_TYPE, "appendByte",
                    "(Ljava/lang/StringBuilder;Ljava/lang/String;B)V"),
            new ToStringMethodInsertion(Type.CHAR_TYPE, "appendChar",
                    "(Ljava/lang/StringBuilder;Ljava/lang/String;C)V"),
            new ToStringMethodInsertion(Type.DOUBLE_TYPE, "appendDouble",
                    "(Ljava/lang/StringBuilder;Ljava/lang/String;D)V"),
            new ToStringMethodInsertion(Type.FLOAT_TYPE, "appendFloat",
                    "(Ljava/lang/StringBuilder;Ljava/lang/String;F)V"),
            new ToStringMethodInsertion(Type.INT_TYPE, "appendInt",
                    "(Ljava/lang/StringBuilder;Ljava/lang/String;I)V"),
            new ToStringMethodInsertion(Type.LONG_TYPE, "appendLong",
                    "(Ljava/lang/StringBuilder;Ljava/lang/String;J)V"),
            new ToStringMethodInsertion(Type.SHORT_TYPE, "appendShort",
                    "(Ljava/lang/StringBuilder;Ljava/lang/String;S)V"),
            // default
            new ObjectMethodInsn(), };
    List<BytecodeGenerator> list = Arrays.asList(arr);
    return Collections.unmodifiableList(list);
}

From source file:boilerplate.processor.adapters.TypeInfo.java

License:Open Source License

public boolean hasFieldOfTypeDouble() {
    for (FieldInfo info : fields) {
        if (Type.DOUBLE_TYPE.equals(info.type)) {
            return true;
        }/* ww  w  . j  a v a 2s .c om*/
    }
    return false;
}

From source file:ch.eiafr.cojac.FloatReplaceClassVisitor.java

License:Apache License

@Override
public FieldVisitor visitField(int accessFlags, String fieldName, String fieldType, String genericSignature,
        Object initValStatic) {// ww  w.j ava  2 s.  c o m
    if (fieldType.equals("F")) {
        return super.visitField(accessFlags, fieldName, COJAC_FLOAT_WRAPPER_TYPE_DESCR, genericSignature, null);
    } else if (fieldType.equals("D")) {
        return super.visitField(accessFlags, fieldName, COJAC_DOUBLE_WRAPPER_TYPE_DESCR, genericSignature,
                null);
    } else if (fieldType.equals(Type.getType(Float.class).getDescriptor())) {
        return super.visitField(accessFlags, fieldName, COJAC_FLOAT_WRAPPER_TYPE_DESCR, genericSignature, null);
    } else if (fieldType.equals(Type.getType(Double.class).getDescriptor())) {
        return super.visitField(accessFlags, fieldName, COJAC_DOUBLE_WRAPPER_TYPE_DESCR, genericSignature,
                null);
    }

    Type type = Type.getType(fieldType);
    if (type.getSort() == Type.ARRAY) {
        if (type.getElementType().equals(Type.FLOAT_TYPE)) {
            String desc = arrayDescriptor(type.getDimensions(), COJAC_FLOAT_WRAPPER_TYPE_DESCR);
            return super.visitField(accessFlags, fieldName, desc, genericSignature, null);
        } else if (type.getElementType().equals(Type.DOUBLE_TYPE)) {
            String desc = arrayDescriptor(type.getDimensions(), COJAC_DOUBLE_WRAPPER_TYPE_DESCR);
            return super.visitField(accessFlags, fieldName, desc, genericSignature, null);
        }
    }
    return super.visitField(accessFlags, fieldName, fieldType, genericSignature, initValStatic);
}

From source file:ch.eiafr.cojac.FloatVariablesSorter.java

License:Apache License

public FloatVariablesSorter(int access, String oldDesc, AnalyzerAdapter mv) {
    super(Opcodes.ASM5, mv);
    Type[] args = Type.getArgumentTypes(oldDesc);
    firstFrameMapping = new int[1 + args.length * 2]; // +1 for 'this'
    Arrays.fill(firstFrameMapping, -1); // so that erroneously using unwritten cells will cause problems...
    boolean hasTarget = (Opcodes.ACC_STATIC & access) == 0; // not static -> there is a 'this' param
    int oldVarIndex = 0;
    int newVarIndex = 0;
    int lastIndexSet = -1;
    if (hasTarget) {
        oldVarIndex = newVarIndex = 1;//from   www.  j a  va2 s  .  c  om
        firstFrameMapping[0] = 0; // 'this' remains 'this' after remapping...
        lastIndexSet = 0;
    }
    for (Type arg : args) {
        firstFrameMapping[oldVarIndex] = newVarIndex;
        lastIndexSet = oldVarIndex;
        oldVarIndex += arg.getSize();
        newVarIndex += arg.getSize();
        if (arg.equals(Type.DOUBLE_TYPE)) {
            newVarIndex--;
        }
        assert !arg.equals(COJAC_DOUBLE_WRAPPER_TYPE); // this would be strange (the descriptor is the old one)
    }
    maxRenumber = lastIndexSet;
}

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

License:Apache License

public static void convertRealToCojacType(Type realType, MethodVisitor mv) {
    // WRAPPER SPEC: FW.fromFloat(float) -> FW,  FW.fromRealFloatWrapper(Float) -> FW
    // WRAPPER SPEC: DW.fromDouble(double) -> DW, DW.fromRealDoubleWrapper(Double) -> DW
    if (realType.equals(Type.FLOAT_TYPE)) {
        mv.visitMethodInsn(INVOKESTATIC, COJAC_FLOAT_WRAPPER_INTERNAL_NAME, "fromFloat",
                "(F)" + COJAC_FLOAT_WRAPPER_TYPE_DESCR, false);
    } else if (realType.equals(JWRAPPER_FLOAT_TYPE)) {
        mv.visitMethodInsn(INVOKESTATIC, COJAC_FLOAT_WRAPPER_INTERNAL_NAME, "fromRealFloatWrapper",
                "(" + JWRAPPER_FLOAT_TYPE.getDescriptor() + ")" + COJAC_FLOAT_WRAPPER_TYPE_DESCR, false);
    } else if (realType.equals(Type.DOUBLE_TYPE)) {
        mv.visitMethodInsn(INVOKESTATIC, COJAC_DOUBLE_WRAPPER_INTERNAL_NAME, "fromDouble",
                "(D)" + COJAC_DOUBLE_WRAPPER_TYPE_DESCR, false);
    } else if (realType.equals(JWRAPPER_DOUBLE_TYPE)) {
        mv.visitMethodInsn(INVOKESTATIC, COJAC_DOUBLE_WRAPPER_INTERNAL_NAME, "fromRealDoubleWrapper",
                "(" + JWRAPPER_DOUBLE_TYPE.getDescriptor() + ")" + COJAC_DOUBLE_WRAPPER_TYPE_DESCR, false);
    } else if (isPrimitiveFloatOrDoubleArray(realType)) {
        mv.visitTypeInsn(CHECKCAST, OBJ_TYPE.getInternalName());
        mv.visitLdcInsn(realType.getDimensions());
        if (realType.getElementType().equals(Type.FLOAT_TYPE)) {
            mv.visitMethodInsn(INVOKESTATIC, FN_NAME, "convertPrimitiveArrayToCojac",
                    "(" + OBJ_DESC + "I)" + OBJ_DESC, false);
        } else if (realType.getElementType().equals(Type.DOUBLE_TYPE)) {
            mv.visitMethodInsn(INVOKESTATIC, DN_NAME, "convertPrimitiveArrayToCojac",
                    "(" + OBJ_DESC + "I)" + OBJ_DESC, false);
        }//from   w w  w . ja  va 2s.c o m
        mv.visitTypeInsn(CHECKCAST, afterFloatReplacement(realType).getInternalName());
    }
}

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

License:Apache License

private static boolean isPrimitiveFloatOrDoubleArray(Type realType) {
    if (realType.getSort() != Type.ARRAY)
        return false;
    Type t = realType.getElementType();
    if (t.equals(Type.FLOAT_TYPE) || t.equals(Type.DOUBLE_TYPE))
        return true;
    return false;
}

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

License:Apache License

public static void convertCojacToRealType(Type realType, MethodVisitor mv) {
    if (realType.equals(Type.FLOAT_TYPE)) {
        mv.visitMethodInsn(INVOKESTATIC, COJAC_FLOAT_WRAPPER_INTERNAL_NAME, "toFloat",
                "(" + COJAC_FLOAT_WRAPPER_TYPE_DESCR + ")F", false);
    } else if (realType.equals(JWRAPPER_FLOAT_TYPE)) {
        mv.visitMethodInsn(INVOKESTATIC, COJAC_FLOAT_WRAPPER_INTERNAL_NAME, "toRealFloatWrapper",
                "(" + COJAC_FLOAT_WRAPPER_TYPE_DESCR + ")" + FL_DESCR, false);
    } else if (realType.equals(Type.DOUBLE_TYPE)) {
        mv.visitMethodInsn(INVOKESTATIC, COJAC_DOUBLE_WRAPPER_INTERNAL_NAME, "toDouble",
                "(" + COJAC_DOUBLE_WRAPPER_TYPE_DESCR + ")D", false);
    } else if (realType.equals(JWRAPPER_DOUBLE_TYPE)) {
        mv.visitMethodInsn(INVOKESTATIC, COJAC_DOUBLE_WRAPPER_INTERNAL_NAME, "toRealDoubleWrapper",
                "(" + COJAC_DOUBLE_WRAPPER_TYPE_DESCR + ")" + DL_DESCR, false);
    } else if (isPrimitiveFloatOrDoubleArray(realType) || isJWrapperFloatOrDoubleArray(realType)) {
        mv.visitTypeInsn(CHECKCAST, OBJ_TYPE.getInternalName());
        mv.visitLdcInsn(realType.getDimensions());
        Type eType = realType.getElementType();
        if (eType.equals(Type.FLOAT_TYPE)) {
            mv.visitMethodInsn(INVOKESTATIC, FN_NAME, "convertArrayToPrimitive",
                    "(" + OBJ_DESC + "I)" + OBJ_DESC, false);
        } else if (eType.equals(Type.DOUBLE_TYPE)) {
            mv.visitMethodInsn(INVOKESTATIC, DN_NAME, "convertArrayToPrimitive",
                    "(" + OBJ_DESC + "I)" + OBJ_DESC, false);
        } else if (eType.equals(JWRAPPER_FLOAT_TYPE)) {
            mv.visitMethodInsn(INVOKESTATIC, FN_NAME, "convertArrayToJWrapper",
                    "(" + OBJ_DESC + "I)" + OBJ_DESC, false);
        } else if (eType.equals(JWRAPPER_DOUBLE_TYPE)) {
            mv.visitMethodInsn(INVOKESTATIC, DN_NAME, "convertArrayToJWrapper",
                    "(" + OBJ_DESC + "I)" + OBJ_DESC, false);
        }/*from   ww w.j  a va  2  s  .  com*/
        mv.visitTypeInsn(CHECKCAST, realType.getInternalName());
    }
}

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

License:Apache License

/** Float|float|Double|double [array] -> CojacWrapper */
public static Type afterFloatReplacement(Type type) {
    if (type.equals(Type.getType(Float.class)))
        return COJAC_FLOAT_WRAPPER_TYPE;
    if (type.equals(Type.FLOAT_TYPE))
        return COJAC_FLOAT_WRAPPER_TYPE;
    if (type.equals(Type.getType(Double.class)))
        return COJAC_DOUBLE_WRAPPER_TYPE;
    if (type.equals(Type.DOUBLE_TYPE))
        return COJAC_DOUBLE_WRAPPER_TYPE;
    if (type.getSort() == Type.ARRAY) {
        Type newType = afterFloatReplacement(type.getElementType());
        if (type.equals(newType))
            return type;
        String desc = "";
        for (int i = 0; i < type.getDimensions(); i++)
            desc += "[";
        desc += newType.getDescriptor();
        return Type.getType(desc);
    }/*from   w  w  w.  jav a2s . com*/
    return type;
}

From source file:cl.inria.stiq.instrumenter.BCIUtils.java

License:Open Source License

public static Type getTypeForSig(char aSig) {
    switch (aSig) {
    case 'I':
        return Type.INT_TYPE;
    case 'J':
        return Type.LONG_TYPE;
    case 'F':
        return Type.FLOAT_TYPE;
    case 'D':
        return Type.DOUBLE_TYPE;
    case 'L':
        return TYPE_OBJECTID;
    default:/*from  w ww . j ava  2s .co  m*/
        throw new RuntimeException("Not handled: " + aSig);
    }
}

From source file:com.android.build.gradle.internal.incremental.ByteCodeUtils.java

License:Apache License

/**
 * Given a *STORE opcode, it returns the type associated to the variable, or null if
 * not a valid opcode./*from w ww .j a va 2  s.  c o m*/
 */
static Type getTypeForStoreOpcode(int opcode) {
    switch (opcode) {
    case Opcodes.ISTORE:
        return Type.INT_TYPE;
    case Opcodes.LSTORE:
        return Type.LONG_TYPE;
    case Opcodes.FSTORE:
        return Type.FLOAT_TYPE;
    case Opcodes.DSTORE:
        return Type.DOUBLE_TYPE;
    case Opcodes.ASTORE:
        return Type.getType(Object.class);
    }
    return null;
}