FileDocCategorySizeDatePackage
JsrInstruction.javaAPI DocJava SE 6 API4566Tue Jun 10 00:22:20 BST 2008com.sun.org.apache.bcel.internal.generic

JsrInstruction

public abstract class JsrInstruction extends BranchInstruction implements UnconditionalBranch, StackProducer, TypedInstruction
Super class for JSR - Jump to subroutine
version
$Id: JsrInstruction.java,v 1.1.2.1 2005/07/31 23:45:28 jeffsuttor Exp $
author
M. Dahm

Fields Summary
Constructors Summary
JsrInstruction(short opcode, InstructionHandle target)

    super(opcode, target);
  
JsrInstruction()
Empty constructor needed for the Class.newInstance() statement in Instruction.readInstruction(). Not to be used otherwise.

Methods Summary
public com.sun.org.apache.bcel.internal.generic.TypegetType(com.sun.org.apache.bcel.internal.generic.ConstantPoolGen cp)

return
return address type

    return new ReturnaddressType(physicalSuccessor());
  
public com.sun.org.apache.bcel.internal.generic.InstructionHandlephysicalSuccessor()
Returns an InstructionHandle to the physical successor of this JsrInstruction. For this method to work, this JsrInstruction object must not be shared between multiple InstructionHandle objects! Formally, there must not be InstructionHandle objects i, j where i != j and i.getInstruction() == this == j.getInstruction().

return
an InstructionHandle to the "next" instruction that will be executed when RETurned from a subroutine.

    InstructionHandle ih = this.target;
    
    // Rewind!
    while(ih.getPrev() != null)
      ih = ih.getPrev();
    
    // Find the handle for "this" JsrInstruction object.
    while(ih.getInstruction() != this)
      ih = ih.getNext();
    
    InstructionHandle toThis = ih;
    
    while(ih != null){
    	ih = ih.getNext();
    	if ((ih != null) && (ih.getInstruction() == this))
        throw new RuntimeException("physicalSuccessor() called on a shared JsrInstruction.");
    }
    
    // Return the physical successor		
    return toThis.getNext();