当前位置: 首页>>代码示例>>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;未经允许,请勿转载。