Overview | Package | Class | Tree | Deprecated | Index | Help
PREV CLASS | NEXT CLASS FRAMES  | NO FRAMES
SUMMARY:  INNER | FIELD | CONSTR | METHOD DETAIL:  FIELD | CONSTR | METHOD

Class DE.fub.inf.JVM.ClassGen.InstructionList

java.lang.Object
  |
  +--DE.fub.inf.JVM.ClassGen.InstructionList

public final class InstructionList
extends java.lang.Object
implements Constants, java.io.Serializable
This class is a container for a list of `Instruction's, instructions can be appended, inserted, deleted, etc.. Instructions are being wrapped into InstructionHandle objects that are returned upon append/insert operations. They give the user (read only) access to the list structure, it can be traversed and manipulated in a controlled way. A list is finally dumped to a byte code array with `getByteCode'.

Version:
$Id: InstructionList.java,v 1.7 1998/10/16 12:47:14 dahm Exp $
Author:
M. Dahm
See Also:
Instruction, InstructionHandle, Serialized Form

Constructor Summary
InstructionList()
          Create (empty) instruction list.
InstructionList(Instruction i)
          Create instruction list containing one instruction.
InstructionList(CompoundInstruction c)
          Initialize list with (nonnull) compound instruction.
InstructionList(byte[] code)
          Initialize instruction list from byte array.
 
Method Summary
InstructionHandle append(InstructionHandle ih, InstructionList il)
          Append another list after instruction (handle) ih contained in this list.
InstructionHandle append(Instruction i, InstructionList il)
          Append another list after instruction i contained in this list.
InstructionHandle append(InstructionList il)
          Append another list to this one.
InstructionHandle append(Instruction i)
          Append an instruction to the end of this list.
BranchHandle append(BranchInstruction i)
          Append a branch instruction to the end of this list.
InstructionHandle append(Instruction i, Instruction j)
          Append a single instruction j after another instruction i, which must be in this list of course!
InstructionHandle append(Instruction i, CompoundInstruction c)
          Append a compound instruction, after instruction i.
InstructionHandle append(CompoundInstruction c)
          Append a compound instruction.
InstructionHandle append(InstructionHandle ih, Instruction i)
          Append an instruction after instruction (handle) ih contained in this list.
InstructionList copy()
           
void delete(InstructionHandle ih)
          Remove instruction from this list.
void delete(Instruction i)
          Remove instruction from this list.
void delete(InstructionHandle from, InstructionHandle to)
          Remove instructions from instruction `from' to instruction `to' contained in this list.
void delete(Instruction from, Instruction to)
          Remove instructions from instruction `from' to instruction `to' contained in this list.
java.util.Enumeration elements()
           
static InstructionHandle findHandle(InstructionHandle[] ihs, int[] pos, int count, int target)
          Find the target instruction (handle) that corresponds to the given target position (byte code offset).
InstructionHandle findHandle(int pos)
          Get instruction handle for instruction at byte code position pos.
byte[] getByteCode()
           
InstructionHandle getEnd()
           
InstructionHandle[] getInstructionHandles()
           
int[] getInstructionPositions()
          Get positions (offsets) of all instructions in the list.
int getLength()
           
InstructionHandle getStart()
           
InstructionHandle insert(InstructionHandle ih, InstructionList il)
          Insert another list before Instruction handle ih contained in this list.
InstructionHandle insert(InstructionList il)
          Insert another list.
InstructionHandle insert(Instruction i, InstructionList il)
          Insert another list before Instruction i contained in this list.
InstructionHandle insert(Instruction i)
          Insert an instruction at start of this list.
BranchHandle insert(BranchInstruction i)
          Insert a branch instruction at start of this list.
InstructionHandle insert(Instruction i, Instruction j)
          Insert a single instruction j before another instruction i, which must be in this list of course!
InstructionHandle insert(Instruction i, CompoundInstruction c)
          Insert a compound instruction before instruction i.
InstructionHandle insert(CompoundInstruction c)
          Insert a compound instruction.
InstructionHandle insert(InstructionHandle ih, Instruction i)
          Insert an instruction before instruction (handle) ih contained in this list.
boolean isEmpty()
          Test for empty list.
void redirectBranches(InstructionHandle old_target, InstructionHandle new_target)
          Redirect all references from old_target to new_target, i.e. update targets of branch instructions.
void redirectExceptionHandlers(CodeExceptionGen[] exceptions, InstructionHandle old_target, InstructionHandle new_target)
          Redirect all references of exception handlers from old_target to new_target.
void redirectLocalVariables(LocalVariableGen[] lg, InstructionHandle old_target, InstructionHandle new_target)
          Redirect all references of local variables from old_target to new_target.
void setPositions()
          Give all instructions their position number (offset in byte stream), i.e. make the list ready to be dumped.
int size()
           
java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notifyAll, notify, toString, wait, wait, wait
 

Constructor Detail

InstructionList

public InstructionList()
Create (empty) instruction list.

InstructionList

public InstructionList(Instruction i)
Create instruction list containing one instruction.
Parameters:
i - initial instruction

InstructionList

public InstructionList(CompoundInstruction c)
Initialize list with (nonnull) compound instruction. Consumes argument list, i.e. it becomes empty.
Parameters:
c - compound instruction (list)

InstructionList

public InstructionList(byte[] code)
Initialize instruction list from byte array.
Parameters:
code - byte array containing the instructions
Method Detail

isEmpty

public final boolean isEmpty()
Test for empty list.

findHandle

public static final InstructionHandle findHandle(InstructionHandle[] ihs,
                                                 int[] pos,
                                                 int count,
                                                 int target)
Find the target instruction (handle) that corresponds to the given target position (byte code offset).
Parameters:
ihs - array of instruction handles
pos - array of positions corresponding to ihs
count - length of arrays
target - target position to search for
Returns:
target position's instruction handle if available

findHandle

public final InstructionHandle findHandle(int pos)
Get instruction handle for instruction at byte code position pos. This only works, if the list is freshly initialized from a byte array or setPositions() has been called before this method.
Parameters:
pos - byte code position to search for
Returns:
target position's instruction handle if available

append

public final InstructionHandle append(InstructionHandle ih,
                                      InstructionList il)
Append another list after instruction (handle) ih contained in this list. Consumes argument list, i.e. it becomes empty.
Parameters:
ih - where to append the instruction list
il - Instruction list to append to this one
Returns:
instruction handle pointing to the first appended instruction

append

public final InstructionHandle append(Instruction i,
                                      InstructionList il)
Append another list after instruction i contained in this list. Consumes argument list, i.e. it becomes empty.
Parameters:
i - where to append the instruction list
il - Instruction list to append to this one
Returns:
instruction handle pointing to the first appended instruction

append

public final InstructionHandle append(InstructionList il)
Append another list to this one.
Parameters:
il - list to append to end of this list
Returns:
instruction handle of the first appended instruction

append

public final InstructionHandle append(Instruction i)
Append an instruction to the end of this list.
Parameters:
i - instruction to append
Returns:
instruction handle of the appended instruction

append

public final BranchHandle append(BranchInstruction i)
Append a branch instruction to the end of this list.
Parameters:
i - branch instruction to append
Returns:
branch instruction handle of the appended instruction

append

public final InstructionHandle append(Instruction i,
                                      Instruction j)
Append a single instruction j after another instruction i, which must be in this list of course!
Parameters:
i - Instruction in list
j - Instruction to append after i in list
Returns:
instruction handle of the first appended instruction

append

public final InstructionHandle append(Instruction i,
                                      CompoundInstruction c)
Append a compound instruction, after instruction i.
Parameters:
i - Instruction in list
c - The composite instruction (containing an InstructionList)
Returns:
instruction handle of the first appended instruction

append

public final InstructionHandle append(CompoundInstruction c)
Append a compound instruction.
Parameters:
c - The composite instruction (containing an InstructionList)
Returns:
instruction handle of the first appended instruction

append

public final InstructionHandle append(InstructionHandle ih,
                                      Instruction i)
Append an instruction after instruction (handle) ih contained in this list.
Parameters:
ih - where to append the instruction list
i - Instruction to append
Returns:
instruction handle pointing to the first appended instruction

insert

public final InstructionHandle insert(InstructionHandle ih,
                                      InstructionList il)
Insert another list before Instruction handle ih contained in this list. Consumes argument list, i.e. it becomes empty.
Parameters:
i - where to append the instruction list
il - Instruction list to insert
Returns:
instruction handle of the first inserted instruction

insert

public final InstructionHandle insert(InstructionList il)
Insert another list.
Parameters:
il - list to insert before start of this list
Returns:
instruction handle of the first inserted instruction

insert

public final InstructionHandle insert(Instruction i,
                                      InstructionList il)
Insert another list before Instruction i contained in this list. Consumes argument list, i.e. it becomes empty.
Parameters:
i - where to append the instruction list
il - Instruction list to insert
Returns:
instruction handle pointing to the first inserted instruction, i.e. il.getStart()

insert

public final InstructionHandle insert(Instruction i)
Insert an instruction at start of this list.
Parameters:
i - instruction to insert
Returns:
instruction handle of the inserted instruction

insert

public final BranchHandle insert(BranchInstruction i)
Insert a branch instruction at start of this list.
Parameters:
i - branch instruction to insert
Returns:
branch instruction handle of the appended instruction

insert

public InstructionHandle insert(Instruction i,
                                Instruction j)
Insert a single instruction j before another instruction i, which must be in this list of course!
Parameters:
i - Instruction in list
j - Instruction to insert before i in list
Returns:
instruction handle of the first inserted instruction

insert

public final InstructionHandle insert(Instruction i,
                                      CompoundInstruction c)
Insert a compound instruction before instruction i.
Parameters:
i - Instruction in list
c - The composite instruction (containing an InstructionList)
Returns:
instruction handle of the first inserted instruction

insert

public final InstructionHandle insert(CompoundInstruction c)
Insert a compound instruction.
Parameters:
c - The composite instruction (containing an InstructionList)
Returns:
instruction handle of the first inserted instruction

insert

public final InstructionHandle insert(InstructionHandle ih,
                                      Instruction i)
Insert an instruction before instruction (handle) ih contained in this list.
Parameters:
ih - where to insert to the instruction list
i - Instruction to insert
Returns:
instruction handle of the first inserted instruction

delete

public final void delete(InstructionHandle ih)
Remove instruction from this list.
Parameters:
ih - instruction (handle) to remove

delete

public final void delete(Instruction i)
Remove instruction from this list.
Parameters:
i - instruction to remove

delete

public final void delete(InstructionHandle from,
                         InstructionHandle to)
Remove instructions from instruction `from' to instruction `to' contained in this list. The user must ensure that `from' is an instruction before `to', or risk havoc.
Parameters:
from - where to start deleting (inclusive)
to - where to end deleting (inclusive)

delete

public final void delete(Instruction from,
                         Instruction to)
Remove instructions from instruction `from' to instruction `to' contained in this list. The user must ensure that `from' is an instruction before `to', or risk havoc.
Parameters:
from - where to start deleting (inclusive)
to - where to end deleting (inclusive)

setPositions

public final void setPositions()
Give all instructions their position number (offset in byte stream), i.e. make the list ready to be dumped.

getByteCode

public byte[] getByteCode()
Returns:
The byte code!

toString

public java.lang.String toString()
Returns:
String containing all instructions in this list.
Overrides:
toString in class java.lang.Object

elements

public java.util.Enumeration elements()
Returns:
Enumeration that lists all instructions (handles)

getInstructionHandles

public final InstructionHandle[] getInstructionHandles()
Returns:
array containing all instructions (handles)

getInstructionPositions

public final int[] getInstructionPositions()
Get positions (offsets) of all instructions in the list. This relies on that the list has been freshly created from an byte code array, or that setPositions() has been called. Otherwise this may be inaccurate.
Returns:
array containing all instruction's offset in byte code

copy

public InstructionList copy()
Returns:
complete, i.e. deep copy of this list

redirectBranches

public void redirectBranches(InstructionHandle old_target,
                             InstructionHandle new_target)
Redirect all references from old_target to new_target, i.e. update targets of branch instructions.
Parameters:
old_target - the old target instruction handle
new_target - the new target instruction handle

redirectLocalVariables

public void redirectLocalVariables(LocalVariableGen[] lg,
                                   InstructionHandle old_target,
                                   InstructionHandle new_target)
Redirect all references of local variables from old_target to new_target.
Parameters:
lg - array of local variables
old_target - the old target instruction handle
new_target - the new target instruction handle
See Also:
MethodGen

redirectExceptionHandlers

public void redirectExceptionHandlers(CodeExceptionGen[] exceptions,
                                      InstructionHandle old_target,
                                      InstructionHandle new_target)
Redirect all references of exception handlers from old_target to new_target.
Parameters:
exceptions - array of exception handlers
old_target - the old target instruction handle
new_target - the new target instruction handle
See Also:
MethodGen

getStart

public InstructionHandle getStart()
Returns:
start of list

getEnd

public InstructionHandle getEnd()
Returns:
end of list

getLength

public int getLength()
Returns:
length of list (Number of instructions, not bytes)

size

public int size()
Returns:
length of list (Number of instructions, not bytes)

Overview | Package | Class | Tree | Deprecated | Index | Help
PREV CLASS | NEXT CLASS FRAMES  | NO FRAMES
SUMMARY:  INNER | FIELD | CONSTR | METHOD DETAIL:  FIELD | CONSTR | METHOD