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


Java Constants.IRETURN属性代码示例

本文整理汇总了Java中com.sun.org.apache.bcel.internal.Constants.IRETURN属性的典型用法代码示例。如果您正苦于以下问题:Java Constants.IRETURN属性的具体用法?Java Constants.IRETURN怎么用?Java Constants.IRETURN使用的例子?那么恭喜您, 这里精选的属性代码示例或许可以为您提供帮助。您也可以进一步了解该属性所在com.sun.org.apache.bcel.internal.Constants的用法示例。


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

示例1: getType

public Type getType() {
  switch(opcode) {
    case Constants.IRETURN: return Type.INT;
    case Constants.LRETURN: return Type.LONG;
    case Constants.FRETURN: return Type.FLOAT;
    case Constants.DRETURN: return Type.DOUBLE;
    case Constants.ARETURN: return Type.OBJECT;
    case Constants.RETURN:  return Type.VOID;

  default: // Never reached
    throw new ClassGenException("Unknown type " + opcode);
  }
}
 
开发者ID:SunburstApps,项目名称:OpenJSharp,代码行数:13,代码来源:ReturnInstruction.java

示例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;
}
 
开发者ID:SunburstApps,项目名称:OpenJSharp,代码行数:74,代码来源:MethodGen.java


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