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


Java InstructionConstants.OP_ALOAD_0屬性代碼示例

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


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

示例1: correspondingVerificationType

/**
 * Creates and returns the verification type corresponding to the given
 * value. If necessary, a class constant is added to the constant pool of
 * the given class.
 */
private VerificationType correspondingVerificationType(ProgramClass  programClass,
                                                       ProgramMethod programMethod,
                                                       CodeAttribute codeAttribute,
                                                       int           offset,
                                                       boolean       isVariable0,
                                                       Value value,
                                                       Value producerValue)
{
    if (value == null)
    {
        return VerificationTypeFactory.createTopType();
    }

    int type = value.computationalType();

    switch (type)
    {
        case Value.TYPE_INSTRUCTION_OFFSET:
        case Value.TYPE_INTEGER:   return VerificationTypeFactory.createIntegerType();
        case Value.TYPE_LONG:      return VerificationTypeFactory.createLongType();
        case Value.TYPE_FLOAT:     return VerificationTypeFactory.createFloatType();
        case Value.TYPE_DOUBLE:    return VerificationTypeFactory.createDoubleType();
        case Value.TYPE_TOP:       return VerificationTypeFactory.createTopType();
        case Value.TYPE_REFERENCE:
            // Is it a Null type?
            ReferenceValue referenceValue = value.referenceValue();
            if (referenceValue.isNull() == Value.ALWAYS)
            {
                return VerificationTypeFactory.createNullType();
            }

            // Does the reference type have a single producer?
            if (offset != PartialEvaluator.AT_METHOD_ENTRY)
            {
                InstructionOffsetValue producers = producerValue.instructionOffsetValue();
                if (producers.instructionOffsetCount() == 1)
                {
                    int producerOffset = producers.instructionOffset(0);

                    // Follow any dup or swap instructions.
                    while (producerOffset != PartialEvaluator.AT_METHOD_ENTRY &&
                           isDupOrSwap(codeAttribute.code[producerOffset]))
                    {
                        producers      = partialEvaluator.getStackBefore(producerOffset).getTopProducerValue(0).instructionOffsetValue();
                        producerOffset = producers.instructionOffset(0);
                    }

                    // Are we in an instance initialization method,
                    // before the super initialization, loading "this"?
                    if (partialEvaluator.isInitializer()                       &&
                        offset <= partialEvaluator.superInitializationOffset() &&
                        (isVariable0 ||
                         producerOffset > PartialEvaluator.AT_METHOD_ENTRY &&
                         codeAttribute.code[producerOffset] == InstructionConstants.OP_ALOAD_0))
                    {
                        // It's an UninitializedThis type.
                        return VerificationTypeFactory.createUninitializedThisType();
                    }

                    // Is the reference type newly created and still
                    // uninitialized?
                    if (producerOffset > PartialEvaluator.AT_METHOD_ENTRY &&
                        offset <= partialEvaluator.initializationOffset(producerOffset))
                    {
                        // It's an Uninitialized type.
                        return VerificationTypeFactory.createUninitializedType(producerOffset);
                    }
                }
            }

            // It's an ordinary Object type.
            return VerificationTypeFactory.createObjectType(createClassConstant(programClass, referenceValue));
    }

    throw new IllegalArgumentException("Unknown computational type ["+type+"]");
}
 
開發者ID:tranleduy2000,項目名稱:javaide,代碼行數:81,代碼來源:CodePreverifier.java

示例2: visitVariableInstruction

public void visitVariableInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, VariableInstruction variableInstruction)
{
    int variableIndex = variableInstruction.variableIndex;

    switch (variableInstruction.opcode)
    {
        case InstructionConstants.OP_ILOAD:
        case InstructionConstants.OP_ILOAD_0:
        case InstructionConstants.OP_ILOAD_1:
        case InstructionConstants.OP_ILOAD_2:
        case InstructionConstants.OP_ILOAD_3:
            replaceIntegerPushInstruction(clazz, offset, variableInstruction, variableIndex);
            break;

        case InstructionConstants.OP_LLOAD:
        case InstructionConstants.OP_LLOAD_0:
        case InstructionConstants.OP_LLOAD_1:
        case InstructionConstants.OP_LLOAD_2:
        case InstructionConstants.OP_LLOAD_3:
            replaceLongPushInstruction(clazz, offset, variableInstruction, variableIndex);
            break;

        case InstructionConstants.OP_FLOAD:
        case InstructionConstants.OP_FLOAD_0:
        case InstructionConstants.OP_FLOAD_1:
        case InstructionConstants.OP_FLOAD_2:
        case InstructionConstants.OP_FLOAD_3:
            replaceFloatPushInstruction(clazz, offset, variableInstruction, variableIndex);
            break;

        case InstructionConstants.OP_DLOAD:
        case InstructionConstants.OP_DLOAD_0:
        case InstructionConstants.OP_DLOAD_1:
        case InstructionConstants.OP_DLOAD_2:
        case InstructionConstants.OP_DLOAD_3:
            replaceDoublePushInstruction(clazz, offset, variableInstruction, variableIndex);
            break;

        case InstructionConstants.OP_ALOAD:
        case InstructionConstants.OP_ALOAD_0:
        case InstructionConstants.OP_ALOAD_1:
        case InstructionConstants.OP_ALOAD_2:
        case InstructionConstants.OP_ALOAD_3:
            replaceReferencePushInstruction(clazz, offset, variableInstruction);
            break;

        case InstructionConstants.OP_ASTORE:
        case InstructionConstants.OP_ASTORE_0:
        case InstructionConstants.OP_ASTORE_1:
        case InstructionConstants.OP_ASTORE_2:
        case InstructionConstants.OP_ASTORE_3:
            deleteReferencePopInstruction(clazz, offset, variableInstruction);
            break;

        case InstructionConstants.OP_RET:
            replaceBranchInstruction(clazz, offset, variableInstruction);
            break;
    }
}
 
開發者ID:tranleduy2000,項目名稱:javaide,代碼行數:59,代碼來源:EvaluationSimplifier.java

示例3: correspondingVerificationType

/**
 * Creates and returns the verification type corresponding to the given
 * value. If necessary, a class constant is added to the constant pool of
 * the given class.
 */
private VerificationType correspondingVerificationType(ProgramClass  programClass,
                                                       ProgramMethod programMethod,
                                                       CodeAttribute codeAttribute,
                                                       int           offset,
                                                       boolean       isVariable0,
                                                       Value         value,
                                                       Value         producerValue)
{
    if (value == null)
    {
        return VerificationTypeFactory.createTopType();
    }

    int type = value.computationalType();

    switch (type)
    {
        case Value.TYPE_INSTRUCTION_OFFSET:
        case Value.TYPE_INTEGER:   return VerificationTypeFactory.createIntegerType();
        case Value.TYPE_LONG:      return VerificationTypeFactory.createLongType();
        case Value.TYPE_FLOAT:     return VerificationTypeFactory.createFloatType();
        case Value.TYPE_DOUBLE:    return VerificationTypeFactory.createDoubleType();
        case Value.TYPE_TOP:       return VerificationTypeFactory.createTopType();
        case Value.TYPE_REFERENCE:
            // Is it a Null type?
            ReferenceValue referenceValue = value.referenceValue();
            if (referenceValue.isNull() == Value.ALWAYS)
            {
                return VerificationTypeFactory.createNullType();
            }

            // Does the reference type have a single producer?
            if (offset != PartialEvaluator.AT_METHOD_ENTRY)
            {
                InstructionOffsetValue producers = producerValue.instructionOffsetValue();
                if (producers.instructionOffsetCount() == 1)
                {
                    int producerOffset = producers.instructionOffset(0);

                    // Follow any dup or swap instructions.
                    while (producerOffset != PartialEvaluator.AT_METHOD_ENTRY &&
                           isDupOrSwap(codeAttribute.code[producerOffset]))
                    {
                        producers      = partialEvaluator.getStackBefore(producerOffset).getTopProducerValue(0).instructionOffsetValue();
                        producerOffset = producers.minimumValue();
                    }

                    // Are we in an instance initialization method,
                    // before the super initialization, loading "this"?
                    if (partialEvaluator.isInitializer()                       &&
                        offset <= partialEvaluator.superInitializationOffset() &&
                        (isVariable0 ||
                         producerOffset > PartialEvaluator.AT_METHOD_ENTRY &&
                         codeAttribute.code[producerOffset] == InstructionConstants.OP_ALOAD_0))
                    {
                        // It's an UninitializedThis type.
                        return VerificationTypeFactory.createUninitializedThisType();
                    }

                    // Is the reference type newly created and still
                    // uninitialized?
                    if (producerOffset > PartialEvaluator.AT_METHOD_ENTRY &&
                        offset <= partialEvaluator.initializationOffset(producerOffset))
                    {
                        // It's an Uninitialized type.
                        return VerificationTypeFactory.createUninitializedType(producerOffset);
                    }
                }
            }

            // It's an ordinary Object type.
            return VerificationTypeFactory.createObjectType(createClassConstant(programClass, referenceValue));
    }

    throw new IllegalArgumentException("Unknown computational type ["+type+"]");
}
 
開發者ID:bazelbuild,項目名稱:bazel,代碼行數:81,代碼來源:CodePreverifier.java


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