Java Code Examples for proguard.classfile.instruction.InstructionConstants#OP_RET

The following examples show how to use proguard.classfile.instruction.InstructionConstants#OP_RET . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: BranchTargetFinder.java    From java-n-IDE-for-Android with Apache License 2.0 6 votes vote down vote up
public void visitVariableInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, VariableInstruction variableInstruction)
{
    // Mark the instruction.
    instructionMarks[offset] |= INSTRUCTION;

    // Check if this is the first instruction of a subroutine.
    checkSubroutine(offset);

    if (variableInstruction.opcode == InstructionConstants.OP_RET)
    {
        // Mark the branch origin.
        markBranchOrigin(offset);

        // Mark the regular subroutine return.
        instructionMarks[offset] |= SUBROUTINE_RETURNING;

        // Mark the next instruction.
        markAfterBranchOrigin(offset + variableInstruction.length(offset));
    }
}
 
Example 2
Source File: StackSizeComputer.java    From java-n-IDE-for-Android with Apache License 2.0 5 votes vote down vote up
public void visitVariableInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, VariableInstruction variableInstruction)
{
    byte opcode = variableInstruction.opcode;

    // The ret instruction end the current instruction block.
    exitInstructionBlock =
        opcode == InstructionConstants.OP_RET;
}
 
Example 3
Source File: SideEffectInstructionChecker.java    From java-n-IDE-for-Android with Apache License 2.0 5 votes vote down vote up
public void visitVariableInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, VariableInstruction variableInstruction)
{
    byte opcode = variableInstruction.opcode;

    // Check for instructions that might cause side effects.
    if (includeReturnInstructions &&
        opcode == InstructionConstants.OP_RET)
    {
        hasSideEffects = true;
    }
}
 
Example 4
Source File: ReachableCodeMarker.java    From java-n-IDE-for-Android with Apache License 2.0 5 votes vote down vote up
public void visitVariableInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, VariableInstruction variableInstruction)
{
    if (variableInstruction.opcode == InstructionConstants.OP_RET)
    {
        next = false;
    }
}
 
Example 5
Source File: CodeSubroutineInliner.java    From java-n-IDE-for-Android with Apache License 2.0 4 votes vote down vote up
public void visitVariableInstruction(Clazz clazz, Method method, CodeAttribute codeAttribute, int offset, VariableInstruction variableInstruction)
{
    byte opcode = variableInstruction.opcode;
    if (opcode == InstructionConstants.OP_RET)
    {
        // Is the return instruction the last instruction of the subroutine?
        if (branchTargetFinder.subroutineEnd(offset) == offset + variableInstruction.length(offset))
        {
            if (DEBUG)
            {
                System.out.println("    Replacing subroutine return at ["+offset+"] by a label");
            }

            // Append a label at this offset instead of the subroutine return.
            codeAttributeComposer.appendLabel(offset);
        }
        else
        {
            if (DEBUG)
            {
                System.out.println("    Replacing subroutine return at ["+offset+"] by a simple branch");
            }

            // Replace the instruction by a branch.
            Instruction replacementInstruction =
                new BranchInstruction(InstructionConstants.OP_GOTO,
                                      branchTargetFinder.subroutineEnd(offset) - offset).shrink();

            codeAttributeComposer.appendInstruction(offset, replacementInstruction);
        }
    }
    else if (branchTargetFinder.isSubroutineStart(offset))
    {
        if (DEBUG)
        {
            System.out.println("    Replacing first subroutine instruction at ["+offset+"] by a label");
        }

        // Append a label at this offset instead of saving the subroutine
        // return address.
        codeAttributeComposer.appendLabel(offset);
    }
    else
    {
        // Append the instruction.
        codeAttributeComposer.appendInstruction(offset, variableInstruction);
    }
}
 
Example 6
Source File: EvaluationSimplifier.java    From java-n-IDE-for-Android with Apache License 2.0 4 votes vote down vote up
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;
    }
}