jellyj.classfile.classgen
Class InstructionList


public final class InstructionList
implements Constants

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'.

Author:
JellyJ Design Group
See Also: Instruction, InstructionHandle

Constructor Summary
InstructionList()
          Create (empty) instruction list.
InstructionList(byte[] code)
          Initialize instruction list from byte array.
InstructionList(Instruction i)
          Initialize list with (nonnull) instruction.
InstructionList(CompoundInstruction c)
          Initialize list with (nonnull) compound instruction.

Method Summary
 final InstructionHandleappend(Instruction i, InstructionList il)
          Append another list after instruction i contained in this list.
 final InstructionHandleappend(InstructionHandle ih, InstructionList il)
          Append another list after instruction (handle) ih contained in this list.
 final InstructionHandleappend(Instruction i)
          Append an instruction to the end of this list.
 final BranchHandleappend(BranchInstruction i)
          Append a branch instruction to the end of this list.
 final InstructionHandleappend(InstructionList il)
          Append another list to this one.
 final InstructionHandleappend(Instruction i, Instruction j)
          Append a single instruction j after another instruction i, which must be in this list of course!
 final InstructionHandleappend(Instruction i, CompoundInstruction c)
          Append a compound instruction, after instruction i.
 final InstructionHandleappend(CompoundInstruction c)
          Append a compound instruction.
 InstructionListcopy()
           
 final voiddelete(InstructionHandle ih)
          Remove instruction from this list.
 final voiddelete(Instruction i)
          Remove instruction from this list.
 final voiddelete(InstructionHandle from, InstructionHandle to)
          Remove instructions from instruction `from' to instruction `to' contained in this list.
 final voiddelete(Instruction from, Instruction to)
          Remove instructions from instruction `from' to instruction `to' contained in this list.
 final voiddispose()
          Delete contents of list.
 Enumerationelements()
           
 byte[]getByteCode()
           
 InstructionHandlegetEnd()
           
 intgetLength()
           
 InstructionHandlegetStart()
           
 final InstructionHandleinsert(Instruction i, InstructionList il)
          Insert another list before Instruction i contained in this list.
 final InstructionHandleinsert(InstructionHandle ih, InstructionList il)
          Insert another list before Instruction handle ih contained in this list.
 final InstructionHandleinsert(Instruction i)
          Insert an instruction at start of this list.
 final BranchHandleinsert(BranchInstruction i)
          Insert a branch instruction at start of this list.
 final InstructionHandleinsert(InstructionList il)
          Insert another list.
 InstructionHandleinsert(Instruction i, Instruction j)
          Insert a single instruction j before another instruction i, which must be in this list of course!
 final InstructionHandleinsert(Instruction i, CompoundInstruction c)
          Insert a compound instruction before instruction i.
 final InstructionHandleinsert(CompoundInstruction c)
          Insert a compound instruction.
 final booleanisEmpty()
          Test for empty list.
 final voidsetPositions()
          Give all instructions their position number (offset in byte stream), i.e.
 StringtoString()
           

Constructor Detail

InstructionList

public InstructionList()
Create (empty) instruction list.

InstructionList

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

InstructionList

public InstructionList(Instruction i)
Initialize list with (nonnull) instruction.
Parameters:
i - first 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)
Method Detail

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 last appended instruction, i.e. il.getEnd()

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 last appended instruction, i.e. il.getEnd()

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(InstructionList il)
Append another list to this one.
Parameters:
il - list to append to end of this list
Returns: instruction handle of the last 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 last 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 last 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 last appended instruction

copy

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

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)

dispose

public final void dispose()
Delete contents of list.

elements

public Enumeration elements()
Returns: Enumeration that lists all instructions

getByteCode

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

getEnd

public InstructionHandle getEnd()
Returns: end of list

getLength

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

getStart

public InstructionHandle getStart()
Returns: start of list

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(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 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 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 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

isEmpty

public final boolean isEmpty()
Test for empty list.

setPositions

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

toString

public String toString()
Returns: String containing all instructions in this list.

Association Links

to Class jellyj.classfile.classgen.InstructionHandle