当前位置: 首页>>代码示例>>Java>>正文


Java TracedStack类代码示例

本文整理汇总了Java中proguard.evaluation.TracedStack的典型用法代码示例。如果您正苦于以下问题:Java TracedStack类的具体用法?Java TracedStack怎么用?Java TracedStack使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。


TracedStack类属于proguard.evaluation包,在下文中一共展示了TracedStack类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: evaluateInstructionBlockAndExceptionHandlers

import proguard.evaluation.TracedStack; //导入依赖的package包/类
/**
 * Evaluates the instruction block and the exception handlers covering the
 * given instruction range in the given code.
 */
private void evaluateInstructionBlockAndExceptionHandlers(Clazz           clazz,
                                                          Method          method,
                                                          CodeAttribute codeAttribute,
                                                          TracedVariables variables,
                                                          TracedStack     stack,
                                                          int             startOffset,
                                                          int             endOffset)
{
    evaluateInstructionBlock(clazz,
                             method,
                             codeAttribute,
                             variables,
                             stack,
                             startOffset);

    evaluateExceptionHandlers(clazz,
                              method,
                              codeAttribute,
                              startOffset,
                              endOffset);
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:26,代码来源:PartialEvaluator.java

示例2: markStackProducers

import proguard.evaluation.TracedStack; //导入依赖的package包/类
/**
 * Marks the stack entries and their producing instructions of the
 * consumer at the given offset.
 * @param clazz          the containing class.
 * @param consumerOffset the offset of the consumer.
 * @param consumer       the consumer of the stack entries.
 */
private void markStackProducers(Clazz       clazz,
                                int         consumerOffset,
                                Instruction consumer)
{
    TracedStack tracedStack =
        partialEvaluator.getStackBefore(consumerOffset);

    int stackSize = tracedStack.size();

    // Mark the producers of the popped values.
    int popCount = consumer.stackPopCount(clazz);
    for (int stackIndex = stackSize - popCount; stackIndex < stackSize; stackIndex++)
    {
        markStackEntryProducers(consumerOffset, stackIndex);
    }
}
 
开发者ID:bazelbuild,项目名称:bazel,代码行数:24,代码来源:EvaluationShrinker.java

示例3: visitProgramMethod

import proguard.evaluation.TracedStack; //导入依赖的package包/类
public void visitProgramMethod(ProgramClass programClass, ProgramMethod programMethod)
{
    // Get the total size of the parameters.
    int parameterSize = ParameterUsageMarker.getParameterSize(programMethod);

    // Make the method invocation static, if possible.
    if ((programMethod.getAccessFlags() & ClassConstants.INTERNAL_ACC_STATIC) == 0 &&
        !ParameterUsageMarker.isParameterUsed(programMethod, 0))
    {
        replaceByStaticInvocation(programClass,
                                  invocationOffset,
                                  invocationInstruction);
    }

    // Remove unused parameters.
    for (int index = 0; index < parameterSize; index++)
    {
        if (!ParameterUsageMarker.isParameterUsed(programMethod, index))
        {
            TracedStack stack =
                partialEvaluator.getStackBefore(invocationOffset);

            int stackIndex = stack.size() - parameterSize + index;

            if (DEBUG)
            {
                System.out.println("  ["+invocationOffset+"] Ignoring parameter #"+index+" of "+programClass.getName()+"."+programMethod.getName(programClass)+programMethod.getDescriptor(programClass)+"] (stack entry #"+stackIndex+" ["+stack.getBottom(stackIndex)+"])");
                System.out.println("    Full stack: "+stack);
            }

            markStackSimplificationBefore(invocationOffset, stackIndex);
        }
    }
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:35,代码来源:EvaluationShrinker.java

示例4: markStackEntryProducers

import proguard.evaluation.TracedStack; //导入依赖的package包/类
/**
 * Marks the stack entry and the corresponding producing instructions
 * of the consumer at the given offset.
 * @param consumerOffset the offset of the consumer.
 * @param stackIndex     the index of the stack entry to be marked
 *                        (counting from the top).
 */
private void markStackEntryProducers(int consumerOffset,
                                     int stackIndex)
{
    TracedStack tracedStack =
        partialEvaluator.getStackBefore(consumerOffset);

    int stackBottomIndex = tracedStack.size() - 1 - stackIndex;

    if (!isStackSimplifiedBefore(consumerOffset, stackBottomIndex))
    {
        markStackEntryProducers(tracedStack.getTopProducerValue(stackIndex).instructionOffsetValue(),
                                stackBottomIndex);
    }
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:22,代码来源:EvaluationShrinker.java

示例5: markInitialization

import proguard.evaluation.TracedStack; //导入依赖的package包/类
/**
 * Marks the stack entry and its initializing instruction
 * ('invokespecial *.<init>') for the given 'new' instruction offset.
 * @param newInstructionOffset the offset of the 'new' instruction.
 */
private void markInitialization(int newInstructionOffset)
{
    int initializationOffset =
        partialEvaluator.initializationOffset(newInstructionOffset);

    TracedStack tracedStack =
        partialEvaluator.getStackAfter(newInstructionOffset);

    markStackEntryAfter(initializationOffset, tracedStack.size() - 1);
    markInstruction(initializationOffset);
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:17,代码来源:EvaluationShrinker.java

示例6: pushCallingInstructionBlock

import proguard.evaluation.TracedStack; //导入依赖的package包/类
/**
 * Pushes block of instructions to be executed in the calling partial
 * evaluator.
 */
private void pushCallingInstructionBlock(TracedVariables variables,
                                         TracedStack     stack,
                                         int             startOffset)
{
    callingInstructionBlockStack.push(new MyInstructionBlock(variables,
                                                             stack,
                                                             startOffset));
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:13,代码来源:PartialEvaluator.java

示例7: pushInstructionBlock

import proguard.evaluation.TracedStack; //导入依赖的package包/类
/**
 * Pushes block of instructions to be executed in this partial evaluator.
 */
private void pushInstructionBlock(TracedVariables variables,
                                  TracedStack     stack,
                                  int             startOffset)
{
    instructionBlockStack.push(new MyInstructionBlock(variables,
                                                      stack,
                                                      startOffset));
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:12,代码来源:PartialEvaluator.java

示例8: evaluateInstructionBlock

import proguard.evaluation.TracedStack; //导入依赖的package包/类
/**
 * Evaluates a block of instructions, starting at the given offset and ending
 * at a branch instruction, a return instruction, or a throw instruction.
 */
private void evaluateInstructionBlock(Clazz           clazz,
                                      Method          method,
                                      CodeAttribute codeAttribute,
                                      TracedVariables variables,
                                      TracedStack     stack,
                                      int             startOffset)
{
    // Execute the initial instruction block.
    evaluateSingleInstructionBlock(clazz,
                                   method,
                                   codeAttribute,
                                   variables,
                                   stack,
                                   startOffset);

    // Execute all resulting instruction blocks on the execution stack.
    while (!instructionBlockStack.empty())
    {
        if (DEBUG) System.out.println("Popping alternative branch out of "+instructionBlockStack.size()+" blocks");

        MyInstructionBlock instructionBlock =
            (MyInstructionBlock)instructionBlockStack.pop();

        evaluateSingleInstructionBlock(clazz,
                                       method,
                                       codeAttribute,
                                       instructionBlock.variables,
                                       instructionBlock.stack,
                                       instructionBlock.startOffset);
    }
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:36,代码来源:PartialEvaluator.java

示例9: MyInstructionBlock

import proguard.evaluation.TracedStack; //导入依赖的package包/类
private MyInstructionBlock(TracedVariables variables,
                           TracedStack     stack,
                           int             startOffset)
{
    this.variables   = variables;
    this.stack       = stack;
    this.startOffset = startOffset;
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:9,代码来源:PartialEvaluator.java

示例10: visitProgramMethod

import proguard.evaluation.TracedStack; //导入依赖的package包/类
public void visitProgramMethod(ProgramClass programClass, ProgramMethod programMethod)
{
    // Get the total size of the parameters.
    int parameterSize = ParameterUsageMarker.getParameterSize(programMethod);

    // Make the method invocation static, if possible.
    if ((programMethod.getAccessFlags() & ClassConstants.ACC_STATIC) == 0 &&
        !ParameterUsageMarker.isParameterUsed(programMethod, 0))
    {
        replaceByStaticInvocation(programClass,
                                  invocationOffset,
                                  invocationInstruction);
    }

    // Remove unused parameters.
    for (int index = 0; index < parameterSize; index++)
    {
        if (!ParameterUsageMarker.isParameterUsed(programMethod, index))
        {
            TracedStack stack =
                partialEvaluator.getStackBefore(invocationOffset);

            int stackIndex = stack.size() - parameterSize + index;

            if (DEBUG)
            {
                System.out.println("  ["+invocationOffset+"] Ignoring parameter #"+index+" of "+programClass.getName()+"."+programMethod.getName(programClass)+programMethod.getDescriptor(programClass)+"] (stack entry #"+stackIndex+" ["+stack.getBottom(stackIndex)+"])");
                System.out.println("    Full stack: "+stack);
            }

            markStackSimplificationBefore(invocationOffset, stackIndex);
        }
    }
}
 
开发者ID:bazelbuild,项目名称:bazel,代码行数:35,代码来源:EvaluationShrinker.java

示例11: isStackEntryPresentBefore

import proguard.evaluation.TracedStack; //导入依赖的package包/类
/**
 * Returns whether the specified stack entry before the given offset is
 * present.
 * @param instructionOffset the offset of the stack entry to be checked.
 * @param stackIndex        the index of the stack entry to be checked
 *                          (counting from the bottom).
 */
private boolean isStackEntryPresentBefore(int instructionOffset,
                                          int stackIndex)
{
    TracedStack tracedStack =
        partialEvaluator.getStackBefore(instructionOffset);

    InstructionOffsetValue producerOffsets =
        tracedStack.getBottomProducerValue(stackIndex).instructionOffsetValue();

    return isAnyStackEntryNecessaryAfter(producerOffsets, stackIndex);
}
 
开发者ID:bazelbuild,项目名称:bazel,代码行数:19,代码来源:EvaluationShrinker.java

示例12: visitCodeAttribute0

import proguard.evaluation.TracedStack; //导入依赖的package包/类
public void visitCodeAttribute0(Clazz clazz, Method method, CodeAttribute codeAttribute)
{
    // Evaluate the instructions, starting at the entry point.
    if (DEBUG)
    {
        System.out.println();
        System.out.println("Partial evaluation: "+clazz.getName()+"."+method.getName(clazz)+method.getDescriptor(clazz));
        System.out.println("  Max locals = "+codeAttribute.u2maxLocals);
        System.out.println("  Max stack  = "+codeAttribute.u2maxStack);
    }

    // Reuse the existing variables and stack objects, ensuring the right size.
    TracedVariables variables = new TracedVariables(codeAttribute.u2maxLocals);
    TracedStack     stack     = new TracedStack(codeAttribute.u2maxStack);

    // Initialize the reusable arrays and variables.
    initializeArrays(codeAttribute);
    initializeParameters(clazz, method, codeAttribute, variables);

    // Find all instruction offsets,...
    codeAttribute.accept(clazz, method, branchTargetFinder);

    // Start executing the first instruction block.
    evaluateInstructionBlockAndExceptionHandlers(clazz,
                                                 method,
                                                 codeAttribute,
                                                 variables,
                                                 stack,
                                                 0,
                                                 codeAttribute.u4codeLength);

    if (DEBUG_RESULTS)
    {
        System.out.println("Evaluation results:");

        int offset = 0;
        do
        {
            if (isBranchOrExceptionTarget(offset))
            {
                System.out.println("Branch target from ["+branchOriginValues[offset]+"]:");
                if (isTraced(offset))
                {
                    System.out.println("  Vars:  "+variablesBefore[offset]);
                    System.out.println("  Stack: "+stacksBefore[offset]);
                }
            }

            Instruction instruction = InstructionFactory.create(codeAttribute.code,
                                                                offset);
            System.out.println(instruction.toString(offset));

            if (isTraced(offset))
            {
                int initializationOffset = branchTargetFinder.initializationOffset(offset);
                if (initializationOffset != NONE)
                {
                    System.out.println("     is to be initialized at ["+initializationOffset+"]");
                }

                InstructionOffsetValue branchTargets = branchTargets(offset);
                if (branchTargets != null)
                {
                    System.out.println("     has overall been branching to "+branchTargets);
                }

                System.out.println("  Vars:  "+variablesAfter[offset]);
                System.out.println("  Stack: "+stacksAfter[offset]);
            }

            offset += instruction.length(offset);
        }
        while (offset < codeAttribute.u4codeLength);
    }
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:76,代码来源:PartialEvaluator.java

示例13: getStackBefore

import proguard.evaluation.TracedStack; //导入依赖的package包/类
/**
 * Returns the stack before execution of the instruction at the given
 * offset.
 */
public TracedStack getStackBefore(int instructionOffset)
{
    return stacksBefore[instructionOffset];
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:9,代码来源:PartialEvaluator.java

示例14: getStackAfter

import proguard.evaluation.TracedStack; //导入依赖的package包/类
/**
 * Returns the stack after execution of the instruction at the given
 * offset.
 */
public TracedStack getStackAfter(int instructionOffset)
{
    return stacksAfter[instructionOffset];
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:9,代码来源:PartialEvaluator.java

示例15: evaluateSubroutine

import proguard.evaluation.TracedStack; //导入依赖的package包/类
/**
 * Evaluates a subroutine and its exception handlers, starting at the given
 * offset and ending at a subroutine return instruction.
 */
private void evaluateSubroutine(Clazz           clazz,
                                Method          method,
                                CodeAttribute codeAttribute,
                                TracedVariables variables,
                                TracedStack     stack,
                                int             subroutineStart,
                                java.util.Stack instructionBlockStack)
{
    int subroutineEnd = branchTargetFinder.subroutineEnd(subroutineStart);

    if (DEBUG) System.out.println("Evaluating subroutine from "+subroutineStart+" to "+subroutineEnd);

    PartialEvaluator subroutinePartialEvaluator = this;

    // Create a temporary partial evaluator if necessary.
    if (evaluationCounts[subroutineStart] > 0)
    {
        if (DEBUG) System.out.println("Creating new partial evaluator for subroutine");

        subroutinePartialEvaluator = new PartialEvaluator(this);

        subroutinePartialEvaluator.initializeArrays(codeAttribute);
    }

    // Evaluate the subroutine.
    subroutinePartialEvaluator.evaluateInstructionBlockAndExceptionHandlers(clazz,
                                                                            method,
                                                                            codeAttribute,
                                                                            variables,
                                                                            stack,
                                                                            subroutineStart,
                                                                            subroutineEnd);

    // Merge back the temporary partial evaluator if necessary.
    if (subroutinePartialEvaluator != this)
    {
        generalize(subroutinePartialEvaluator, 0, codeAttribute.u4codeLength);
    }

    if (DEBUG) System.out.println("Ending subroutine from "+subroutineStart+" to "+subroutineEnd);
}
 
开发者ID:tranleduy2000,项目名称:javaide,代码行数:46,代码来源:PartialEvaluator.java


注:本文中的proguard.evaluation.TracedStack类示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。