org.apache.bcel.generic

Class BranchInstruction

Implemented Interfaces:
Cloneable, InstructionTargeter, Serializable
Known Direct Subclasses:
GotoInstruction, IfInstruction, JsrInstruction, Select

public abstract class BranchInstruction
extends Instruction
implements InstructionTargeter

Abstract super class for branching instructions like GOTO, IFEQ, etc.. Branch instructions may have a variable length, namely GOTO, JSR, LOOKUPSWITCH and TABLESWITCH.

Version:
$Id: BranchInstruction.java,v 1.1.1.1 2001/10/29 20:00:07 jvanzyl Exp $

Author:
M. Dahm

See Also:
InstructionList

Field Summary

protected int
index
protected int
position
protected InstructionHandle
target

Fields inherited from class org.apache.bcel.generic.Instruction

length, opcode

Constructor Summary

BranchInstruction(short opcode, InstructionHandle target)
Common super constructor

Method Summary

boolean
containsTarget(InstructionHandle ih)
void
dump(DataOutputStream out)
Dump instruction as byte code to stream out.
int
getIndex()
InstructionHandle
getTarget()
protected int
getTargetOffset()
protected int
getTargetOffset(InstructionHandle target)
protected void
initFromFile(ByteSequence bytes, boolean wide)
Read needed data (e.g.
void
setTarget(InstructionHandle target)
Set branch target
String
toString(boolean verbose)
Long output format: <position in byte code> <name of opcode> "["<opcode number>"]" "("<length of instruction>")" "<"<target instruction>">" "@"<branch target offset>
protected int
updatePosition(int offset, int max_offset)
Called by InstructionList.setPositions when setting the position for every instruction.
void
updateTarget(InstructionHandle old_ih, InstructionHandle new_ih)

Methods inherited from class org.apache.bcel.generic.Instruction

accept, consumeStack, copy, dump, equals, getComparator, getLength, getName, getOpcode, initFromFile, produceStack, readInstruction, setComparator, toString, toString, toString

Field Details

index

protected int index


position

protected int position


target

protected InstructionHandle target

Constructor Details

BranchInstruction

protected BranchInstruction(short opcode,
                            InstructionHandle target)
Common super constructor

Parameters:
target - instruction to branch to

Method Details

containsTarget

public boolean containsTarget(InstructionHandle ih)
Specified by:
containsTarget in interface InstructionTargeter

Returns:
true, if ih is target of this instruction


dump

public void dump(DataOutputStream out)
            throws IOException
Dump instruction as byte code to stream out.
Overrides:
dump in interface Instruction

Parameters:
out - Output stream


getIndex

public final int getIndex()

Returns:
target offset in byte code


getTarget

public InstructionHandle getTarget()

Returns:
target of branch instruction


getTargetOffset

protected int getTargetOffset()

Returns:
the offset to this instruction's target


getTargetOffset

protected int getTargetOffset(InstructionHandle target)

Parameters:
target - branch target

Returns:
the offset to `target' relative to this instruction


initFromFile

protected void initFromFile(ByteSequence bytes,
                            boolean wide)
            throws IOException
Read needed data (e.g. index) from file. Conversion to a InstructionHandle is done in InstructionList(byte[]).
Overrides:
initFromFile in interface Instruction

Parameters:
bytes - input stream
wide - wide prefix?

See Also:
InstructionList


setTarget

public void setTarget(InstructionHandle target)
Set branch target

Parameters:
target - branch target


toString

public String toString(boolean verbose)
Long output format: <position in byte code> <name of opcode> "["<opcode number>"]" "("<length of instruction>")" "<"<target instruction>">" "@"<branch target offset>
Overrides:
toString in interface Instruction

Parameters:
verbose - long/short format switch

Returns:
mnemonic for instruction


updatePosition

protected int updatePosition(int offset,
                             int max_offset)
Called by InstructionList.setPositions when setting the position for every instruction. In the presence of variable length instructions `setPositions' performs multiple passes over the instruction list to calculate the correct (byte) positions and offsets by calling this function.

Parameters:
offset - additional offset caused by preceding (variable length) instructions
max_offset - the maximum offset that may be caused by these instructions

Returns:
additional offset caused by possible change of this instruction's length


updateTarget

public void updateTarget(InstructionHandle old_ih,
                         InstructionHandle new_ih)
Specified by:
updateTarget in interface InstructionTargeter

Parameters:
old_ih - old target
new_ih - new target