本文整理汇总了Java中com.sun.org.apache.bcel.internal.Constants.JSR属性的典型用法代码示例。如果您正苦于以下问题:Java Constants.JSR属性的具体用法?Java Constants.JSR怎么用?Java Constants.JSR使用的例子?那么恭喜您, 这里精选的属性代码示例或许可以为您提供帮助。您也可以进一步了解该属性所在类com.sun.org.apache.bcel.internal.Constants
的用法示例。
在下文中一共展示了Constants.JSR属性的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。
示例1: createBranchInstruction
/** Create branch instruction by given opcode, except LOOKUPSWITCH and TABLESWITCH.
* For those you should use the SWITCH compound instruction.
*/
public static BranchInstruction createBranchInstruction(short opcode, InstructionHandle target) {
switch(opcode) {
case Constants.IFEQ: return new IFEQ(target);
case Constants.IFNE: return new IFNE(target);
case Constants.IFLT: return new IFLT(target);
case Constants.IFGE: return new IFGE(target);
case Constants.IFGT: return new IFGT(target);
case Constants.IFLE: return new IFLE(target);
case Constants.IF_ICMPEQ: return new IF_ICMPEQ(target);
case Constants.IF_ICMPNE: return new IF_ICMPNE(target);
case Constants.IF_ICMPLT: return new IF_ICMPLT(target);
case Constants.IF_ICMPGE: return new IF_ICMPGE(target);
case Constants.IF_ICMPGT: return new IF_ICMPGT(target);
case Constants.IF_ICMPLE: return new IF_ICMPLE(target);
case Constants.IF_ACMPEQ: return new IF_ACMPEQ(target);
case Constants.IF_ACMPNE: return new IF_ACMPNE(target);
case Constants.GOTO: return new GOTO(target);
case Constants.JSR: return new JSR(target);
case Constants.IFNULL: return new IFNULL(target);
case Constants.IFNONNULL: return new IFNONNULL(target);
case Constants.GOTO_W: return new GOTO_W(target);
case Constants.JSR_W: return new JSR_W(target);
default:
throw new RuntimeException("Invalid opcode: " + opcode);
}
}
示例2: getMaxStack
/**
* Computes stack usage of an instruction list by performing control flow analysis.
*
* @return maximum stack depth used by method
*/
public static int getMaxStack(ConstantPoolGen cp, InstructionList il, CodeExceptionGen[] et) {
BranchStack branchTargets = new BranchStack();
/* Initially, populate the branch stack with the exception
* handlers, because these aren't (necessarily) branched to
* explicitly. in each case, the stack will have depth 1,
* containing the exception object.
*/
for (int i = 0; i < et.length; i++) {
InstructionHandle handler_pc = et[i].getHandlerPC();
if (handler_pc != null)
branchTargets.push(handler_pc, 1);
}
int stackDepth = 0, maxStackDepth = 0;
InstructionHandle ih = il.getStart();
while(ih != null) {
Instruction instruction = ih.getInstruction();
short opcode = instruction.getOpcode();
int delta = instruction.produceStack(cp) - instruction.consumeStack(cp);
stackDepth += delta;
if(stackDepth > maxStackDepth)
maxStackDepth = stackDepth;
// choose the next instruction based on whether current is a branch.
if(instruction instanceof BranchInstruction) {
BranchInstruction branch = (BranchInstruction) instruction;
if(instruction instanceof Select) {
// explore all of the select's targets. the default target is handled below.
Select select = (Select) branch;
InstructionHandle[] targets = select.getTargets();
for (int i = 0; i < targets.length; i++)
branchTargets.push(targets[i], stackDepth);
// nothing to fall through to.
ih = null;
} else if(!(branch instanceof IfInstruction)) {
// if an instruction that comes back to following PC,
// push next instruction, with stack depth reduced by 1.
if(opcode == Constants.JSR || opcode == Constants.JSR_W)
branchTargets.push(ih.getNext(), stackDepth - 1);
ih = null;
}
// for all branches, the target of the branch is pushed on the branch stack.
// conditional branches have a fall through case, selects don't, and
// jsr/jsr_w return to the next instruction.
branchTargets.push(branch.getTarget(), stackDepth);
} else {
// check for instructions that terminate the method.
if(opcode == Constants.ATHROW || opcode == Constants.RET ||
(opcode >= Constants.IRETURN && opcode <= Constants.RETURN))
ih = null;
}
// normal case, go to the next instruction.
if(ih != null)
ih = ih.getNext();
// if we have no more instructions, see if there are any deferred branches to explore.
if(ih == null) {
BranchTarget bt = branchTargets.pop();
if (bt != null) {
ih = bt.target;
stackDepth = bt.stackDepth;
}
}
}
return maxStackDepth;
}