當前位置: 首頁>>代碼示例>>Java>>正文


Java GeneratorAdapter.unbox方法代碼示例

本文整理匯總了Java中org.objectweb.asm.commons.GeneratorAdapter.unbox方法的典型用法代碼示例。如果您正苦於以下問題:Java GeneratorAdapter.unbox方法的具體用法?Java GeneratorAdapter.unbox怎麽用?Java GeneratorAdapter.unbox使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在org.objectweb.asm.commons.GeneratorAdapter的用法示例。


在下文中一共展示了GeneratorAdapter.unbox方法的4個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Java代碼示例。

示例1: unbox

import org.objectweb.asm.commons.GeneratorAdapter; //導入方法依賴的package包/類
/**
 * Generates unboxing bytecode for the passed type. An {@link Object} is expected to be on the
 * stack when these bytecodes are inserted.
 *
 * ASM takes a short cut when dealing with short/byte types and convert them into int rather
 * than short/byte types. This is not an issue on the jvm nor Android's ART but it is an issue
 * on Dalvik.
 *
 * @param mv the {@link GeneratorAdapter} generating a method implementation.
 * @param type the expected un-boxed type.
 */
public static void unbox(GeneratorAdapter mv, Type type) {
    if (type.equals(Type.SHORT_TYPE)) {
        mv.checkCast(NUMBER_TYPE);
        mv.invokeVirtual(NUMBER_TYPE, SHORT_VALUE);
    } else if (type.equals(Type.BYTE_TYPE)) {
        mv.checkCast(NUMBER_TYPE);
        mv.invokeVirtual(NUMBER_TYPE, BYTE_VALUE);
    } else {
        mv.unbox(type);
    }
}
 
開發者ID:Idtk,項目名稱:Hotfix,代碼行數:23,代碼來源:ByteCodeUtils.java

示例2: loadArguments

import org.objectweb.asm.commons.GeneratorAdapter; //導入方法依賴的package包/類
@Contract("null, null, null, !null -> fail")
private static void loadArguments(GeneratorAdapter ga, Type[] interfaceTypes, Type[] targetTypes, boolean isTargetPublic) {
    Ensure.ensureCondition(interfaceTypes.length == targetTypes.length,
            "Interface and target parameter count don't match!");
    /* Iterate through all types */
    for(int i = 0; i < interfaceTypes.length; i++) {
        Type interfaceType = interfaceTypes[i];
        Type targetType = targetTypes[i];

        ga.loadArg(i);

        /* Do not do boxing/unboxing if MethodHandle.invoke is used, it handles them on its own */
        if(!isTargetPublic) continue;

        if(isPrimitive(interfaceType)) {
            if(!isPrimitive(targetType)) {
                ga.box(targetType);
            }
        } else {
            if(isPrimitive(targetType)) {
                ga.unbox(targetType);
            } else {
                if(interfaceType.equals(OBJECT)) {
                    ga.checkCast(targetType);
                    ga.cast(interfaceType, targetType);
                }
            }
        }
    }
}
 
開發者ID:mikroskeem,項目名稱:Shuriken,代碼行數:31,代碼來源:MethodGenerator.java

示例3: handleReturn

import org.objectweb.asm.commons.GeneratorAdapter; //導入方法依賴的package包/類
@Contract("null, null, null -> fail")
private static void handleReturn(GeneratorAdapter ga, Method interfaceMethod, Type targetReturnType) {
    Type returnType = Type.getReturnType(interfaceMethod);

    if(isPrimitive(returnType)) {
        if(!isPrimitive(targetReturnType)) {
            ga.unbox(targetReturnType);
        }
    } else {
        if(isPrimitive(targetReturnType)) {
            ga.box(targetReturnType);
        }
    }
}
 
開發者ID:mikroskeem,項目名稱:Shuriken,代碼行數:15,代碼來源:MethodGenerator.java

示例4: emitBody

import org.objectweb.asm.commons.GeneratorAdapter; //導入方法依賴的package包/類
static void emitBody(ObjExpr objx, GeneratorAdapter gen, Class retClass, Expr body) {
		MaybePrimitiveExpr be = (MaybePrimitiveExpr) body;
		if(Util.isPrimitive(retClass) && be.canEmitPrimitive())
			{
			Class bc = maybePrimitiveType(be);
			if(bc == retClass)
				be.emitUnboxed(C.RETURN, objx, gen);
			else if(retClass == long.class && bc == int.class)
				{
				be.emitUnboxed(C.RETURN, objx, gen);
				gen.visitInsn(I2L);
				}
			else if(retClass == double.class && bc == float.class)
				{
				be.emitUnboxed(C.RETURN, objx, gen);
				gen.visitInsn(F2D);
				}
			else if(retClass == int.class && bc == long.class)
				{
				be.emitUnboxed(C.RETURN, objx, gen);
				gen.invokeStatic(RT_TYPE, Method.getMethod("int intCast(long)"));
				}
			else if(retClass == float.class && bc == double.class)
				{
				be.emitUnboxed(C.RETURN, objx, gen);
				gen.visitInsn(D2F);
				}
			else
				throw new IllegalArgumentException("Mismatched primitive return, expected: "
				                                   + retClass + ", had: " + be.getJavaClass());
			}
		else
			{
			body.emit(C.RETURN, objx, gen);
			if(retClass == void.class)
				{
				gen.pop();
				}
			else
				gen.unbox(Type.getType(retClass));
			}
}
 
開發者ID:mrange,項目名稱:fsharpadvent2016,代碼行數:43,代碼來源:Compiler.java


注:本文中的org.objectweb.asm.commons.GeneratorAdapter.unbox方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。