FileDocCategorySizeDatePackage
JsrInstruction.javaAPI DocJava SE 5 API4551Fri Aug 26 14:55:22 BST 2005com.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.1.1 2001/10/29 20:00:20 jvanzyl 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();