de.fub.bytecode.generic
Class InstructionHandle

java.lang.Object
  |
  +--de.fub.bytecode.generic.InstructionHandle
All Implemented Interfaces:
java.io.Serializable
Direct Known Subclasses:
BranchHandle

public class InstructionHandle
extends java.lang.Object
implements java.io.Serializable

Instances of this class give users a handle to the instructions contained in an InstructionList. Instruction objects may be used more than once within a list, this is useful because it saves memory and may be much faster. Within an InstructionList an InstructionHandle object is wrapped around all instructions, i.e., it implements a cell in a doubly-linked list. From the outside only the next and the previous instruction (handle) are accessible. One can traverse the list via an Enumeration returned by InstructionList.elements().

Version:
$Id: InstructionHandle.java,v 1.5 2001/06/07 10:30:02 ehaase Exp $
Author:
M. Dahm
See Also:
Instruction, BranchHandle, InstructionList, Serialized Form

Field Summary
protected  int i_position
           
 
Constructor Summary
protected InstructionHandle(Instruction i)
           
 
Method Summary
 void accept(Visitor v)
          Convenience method, simply calls accept() on the contained instruction.
 void addAttribute(java.lang.Object key, java.lang.Object attr)
          Add an attribute to an instruction handle.
protected  void addHandle()
          Overridden in BranchHandle
 void addTargeter(InstructionTargeter t)
          Denote this handle is being referenced by t.
 java.lang.Object getAttribute(java.lang.Object key)
          Get attribute of an instruction handle.
 Instruction getInstruction()
           
 InstructionHandle getNext()
           
 int getPosition()
           
 InstructionHandle getPrev()
           
 InstructionTargeter[] getTargeters()
           
 boolean hasTargeters()
           
 void removeAllTargeters()
          Remove all targeters, if any.
 void removeAttribute(java.lang.Object key)
          Delete an attribute of an instruction handle.
 void removeTargeter(InstructionTargeter t)
          Denote this handle isn't referenced anymore by t.
 void setInstruction(Instruction i)
          Replace current instruction contained in this handle.
 Instruction swapInstruction(Instruction i)
          Temporarily swap the current instruction, without disturbing anything.
 java.lang.String toString()
           
 java.lang.String toString(boolean verbose)
           
protected  int updatePosition(int offset, int max_offset)
          Called by InstructionList.setPositions when setting the position for every instruction.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

i_position

protected int i_position
Constructor Detail

InstructionHandle

protected InstructionHandle(Instruction i)
Method Detail

getNext

public final InstructionHandle getNext()

getPrev

public final InstructionHandle getPrev()

getInstruction

public final Instruction getInstruction()

setInstruction

public void setInstruction(Instruction i)
Replace current instruction contained in this handle. Old instruction is disposed using Instruction.dispose().

swapInstruction

public Instruction swapInstruction(Instruction i)
Temporarily swap the current instruction, without disturbing anything. Meant to be used by a debugger, implementing breakpoints. Current instruction is returned.

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

getPosition

public int getPosition()
Returns:
the position, i.e., the byte code offset of the contained instruction. This is accurate only after InstructionList.setPositions() has been called.

addHandle

protected void addHandle()
Overridden in BranchHandle

removeAllTargeters

public void removeAllTargeters()
Remove all targeters, if any.

removeTargeter

public void removeTargeter(InstructionTargeter t)
Denote this handle isn't referenced anymore by t.

addTargeter

public void addTargeter(InstructionTargeter t)
Denote this handle is being referenced by t.

hasTargeters

public boolean hasTargeters()

getTargeters

public InstructionTargeter[] getTargeters()
Returns:
null, if there are no targeters

toString

public java.lang.String toString(boolean verbose)
Returns:
a (verbose) string representation of the contained instruction.

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object
Returns:
a string representation of the contained instruction.

addAttribute

public void addAttribute(java.lang.Object key,
                         java.lang.Object attr)
Add an attribute to an instruction handle.
Parameters:
key - the key object to store/retrieve the attribute
attr - the attribute to associate with this handle

removeAttribute

public void removeAttribute(java.lang.Object key)
Delete an attribute of an instruction handle.
Parameters:
key - the key object to retrieve the attribute

getAttribute

public java.lang.Object getAttribute(java.lang.Object key)
Get attribute of an instruction handle.
Parameters:
key - the key object to store/retrieve the attribute

accept

public void accept(Visitor v)
Convenience method, simply calls accept() on the contained instruction.
Parameters:
v - Visitor object