org.apache.jdo.impl.enhancer.classfile
Class Insn

java.lang.Object
  extended byorg.apache.jdo.impl.enhancer.classfile.Insn
All Implemented Interfaces:
VMConstants
Direct Known Subclasses:
InsnConstOp, InsnIInc, InsnIntOp, InsnLookupSwitch, InsnMultiDimArrayNew, InsnSingle, InsnTableSwitch, InsnTarget, InsnTargetOp

public abstract class Insn
extends java.lang.Object
implements VMConstants

Insn is an abstract class which represents a java VM instruction in a sequence of instructions.


Field Summary
private  int insnOffset
           
private  int insnOpcode
           
private  Insn nextInsn
           
(package private) static int NO_OFFSET
           
static int opc_target
           
private  Insn prevInsn
           
 
Fields inherited from interface org.apache.jdo.impl.enhancer.classfile.VMConstants
ACCAbstract, ACCAnnotation, ACCBridge, ACCEnum, ACCFinal, ACCInterface, ACCNative, ACCPrivate, ACCProtected, ACCPublic, ACCStatic, ACCStrict, ACCSuper, ACCSynchronized, ACCSynthetic, ACCTransient, ACCVarargs, ACCVolatile, CONSTANTClass, CONSTANTDouble, CONSTANTFieldRef, CONSTANTFloat, CONSTANTInteger, CONSTANTInterfaceMethodRef, CONSTANTLong, CONSTANTMethodRef, CONSTANTNameAndType, CONSTANTString, CONSTANTUnicode, CONSTANTUtf8, opc_aaload, opc_aastore, opc_aconst_null, opc_aload, opc_aload_0, opc_aload_1, opc_aload_2, opc_aload_3, opc_anewarray, opc_areturn, opc_arraylength, opc_astore, opc_astore_0, opc_astore_1, opc_astore_2, opc_astore_3, opc_athrow, opc_baload, opc_bastore, opc_bipush, opc_caload, opc_castore, opc_checkcast, opc_d2f, opc_d2i, opc_d2l, opc_dadd, opc_daload, opc_dastore, opc_dcmpg, opc_dcmpl, opc_dconst_0, opc_dconst_1, opc_ddiv, opc_dload, opc_dload_0, opc_dload_1, opc_dload_2, opc_dload_3, opc_dmul, opc_dneg, opc_drem, opc_dreturn, opc_dstore, opc_dstore_0, opc_dstore_1, opc_dstore_2, opc_dstore_3, opc_dsub, opc_dup, opc_dup_x1, opc_dup_x2, opc_dup2, opc_dup2_x1, opc_dup2_x2, opc_f2d, opc_f2i, opc_f2l, opc_fadd, opc_faload, opc_fastore, opc_fcmpg, opc_fcmpl, opc_fconst_0, opc_fconst_1, opc_fconst_2, opc_fdiv, opc_fload, opc_fload_0, opc_fload_1, opc_fload_2, opc_fload_3, opc_fmul, opc_fneg, opc_frem, opc_freturn, opc_fstore, opc_fstore_0, opc_fstore_1, opc_fstore_2, opc_fstore_3, opc_fsub, opc_getfield, opc_getstatic, opc_goto, opc_goto_w, opc_i2b, opc_i2c, opc_i2d, opc_i2f, opc_i2l, opc_i2s, opc_iadd, opc_iaload, opc_iand, opc_iastore, opc_iconst_0, opc_iconst_1, opc_iconst_2, opc_iconst_3, opc_iconst_4, opc_iconst_5, opc_iconst_m1, opc_idiv, opc_if_acmpeq, opc_if_acmpne, opc_if_icmpeq, opc_if_icmpge, opc_if_icmpgt, opc_if_icmple, opc_if_icmplt, opc_if_icmpne, opc_ifeq, opc_ifge, opc_ifgt, opc_ifle, opc_iflt, opc_ifne, opc_ifnonnull, opc_ifnull, opc_iinc, opc_iload, opc_iload_0, opc_iload_1, opc_iload_2, opc_iload_3, opc_imul, opc_ineg, opc_instanceof, opc_invokedynamic, opc_invokeinterface, opc_invokespecial, opc_invokestatic, opc_invokevirtual, opc_ior, opc_irem, opc_ireturn, opc_ishl, opc_ishr, opc_istore, opc_istore_0, opc_istore_1, opc_istore_2, opc_istore_3, opc_isub, opc_iushr, opc_ixor, opc_jsr, opc_jsr_w, opc_l2d, opc_l2f, opc_l2i, opc_ladd, opc_laload, opc_land, opc_lastore, opc_lcmp, opc_lconst_0, opc_lconst_1, opc_ldc, opc_ldc_w, opc_ldc2_w, opc_ldiv, opc_lload, opc_lload_0, opc_lload_1, opc_lload_2, opc_lload_3, opc_lmul, opc_lneg, opc_lookupswitch, opc_lor, opc_lrem, opc_lreturn, opc_lshl, opc_lshr, opc_lstore, opc_lstore_0, opc_lstore_1, opc_lstore_2, opc_lstore_3, opc_lsub, opc_lushr, opc_lxor, opc_monitorenter, opc_monitorexit, opc_multianewarray, opc_new, opc_newarray, opc_nop, opc_pop, opc_pop2, opc_putfield, opc_putstatic, opc_ret, opc_return, opc_saload, opc_sastore, opc_sipush, opc_swap, opc_tableswitch, opc_wide, T_BOOLEAN, T_BYTE, T_CHAR, T_DOUBLE, T_FLOAT, T_INT, T_LONG, T_SHORT, T_TWOWORD, T_UNKNOWN, T_WORD, TC_INTERFACE, TC_OBJECT, TC_STRING
 
Constructor Summary
(package private) Insn(int theOpcode, int theOffset)
           
 
Method Summary
 Insn append(Insn i)
          Append an instruction sequence at the end of this instruction sequence.
abstract  java.lang.String argTypes()
          What are the types of the stack operands ?
abstract  boolean branches()
          Does this instruction branch?
static Insn create(int theOpCode)
          Create an instruction which requires no immediate operands
static Insn create(int theOpCode, ConstBasic constValue)
          Create an instruction which requires a single constant from the constant pool as an immediate operand.
static Insn create(int theOpCode, InsnTarget target)
          Create an instruction which requires a single branch offset as an immediate operand.
static Insn create(int theOpCode, int intValue)
          Create an instruction which requires a single integral constant as an immediate operand.
 Insn insert(Insn i)
          Insert an instruction sequence in the code sequence after this instruction.
 boolean isEqual(java.util.Stack msg, java.lang.Object obj)
          Compares this instance with another for structural equality.
static int loadStoreDataType(int opcode)
          Return the type of value manipulated by the load/store instruction
 void markTargets()
          Mark possible branch targets
 Insn next()
          Returns the next instruction in the code sequence
abstract  int nStackArgs()
          How many words of stack operands does this instruction take?
abstract  int nStackResults()
          How many words of stack results does this instruction deposit?
 int offset()
          Return the offset of this instruction in the containing code sequence
 int opcode()
          Return the opcode for this instruction
static java.lang.String opName(int opcode)
          Return the name of the operation for a given opcode
 Insn prev()
          Returns the previous instruction in the code sequence
(package private) abstract  void print(java.io.PrintStream out, int indent)
           
 void printInsn(java.io.PrintStream out)
          Print this instruction to the output stream
 void printList(java.io.PrintStream out)
          Print the sequence of instructions to the output stream
(package private) static Insn read(InsnReadEnv insnEnv)
           
 void remove()
          Removes the current instruction from it's embedding sequence.
(package private)  int resolveOffset(int pc)
           
abstract  java.lang.String resultTypes()
          What are the types of the stack results?
 Insn setNext(Insn i)
          Insert the single instruction in the code sequence after this instruction.
(package private) abstract  int size()
           
(package private) abstract  int store(byte[] buf, int index)
           
(package private) static int storeInt(byte[] buf, int index, int v)
           
(package private) static int storeShort(byte[] buf, int index, short v)
           
 java.lang.String toString()
          A printable representation
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

NO_OFFSET

static final int NO_OFFSET
See Also:
Constant Field Values

opc_target

public static final int opc_target
See Also:
Constant Field Values

insnOpcode

private int insnOpcode

insnOffset

private int insnOffset

nextInsn

private Insn nextInsn

prevInsn

private Insn prevInsn
Constructor Detail

Insn

Insn(int theOpcode,
     int theOffset)
Method Detail

next

public Insn next()
Returns the next instruction in the code sequence


prev

public Insn prev()
Returns the previous instruction in the code sequence


remove

public void remove()
Removes the current instruction from it's embedding sequence.


setNext

public Insn setNext(Insn i)
Insert the single instruction in the code sequence after this instruction. Returns the inserted instruction.


insert

public Insn insert(Insn i)
Insert an instruction sequence in the code sequence after this instruction. Returns the final instruction.


append

public Insn append(Insn i)
Append an instruction sequence at the end of this instruction sequence. Returns the final instruction.


opcode

public int opcode()
Return the opcode for this instruction


offset

public int offset()
Return the offset of this instruction in the containing code sequence


nStackArgs

public abstract int nStackArgs()
How many words of stack operands does this instruction take?


nStackResults

public abstract int nStackResults()
How many words of stack results does this instruction deposit?


argTypes

public abstract java.lang.String argTypes()
What are the types of the stack operands ?


resultTypes

public abstract java.lang.String resultTypes()
What are the types of the stack results?


branches

public abstract boolean branches()
Does this instruction branch?


markTargets

public void markTargets()
Mark possible branch targets


opName

public static java.lang.String opName(int opcode)
Return the name of the operation for a given opcode


create

public static Insn create(int theOpCode)
Create an instruction which requires no immediate operands


create

public static Insn create(int theOpCode,
                          ConstBasic constValue)
Create an instruction which requires a single constant from the constant pool as an immediate operand.


create

public static Insn create(int theOpCode,
                          int intValue)
Create an instruction which requires a single integral constant as an immediate operand.


create

public static Insn create(int theOpCode,
                          InsnTarget target)
Create an instruction which requires a single branch offset as an immediate operand.


printList

public void printList(java.io.PrintStream out)
Print the sequence of instructions to the output stream


printInsn

public void printInsn(java.io.PrintStream out)
Print this instruction to the output stream


isEqual

public boolean isEqual(java.util.Stack msg,
                       java.lang.Object obj)
Compares this instance with another for structural equality.


toString

public java.lang.String toString()
A printable representation


print

abstract void print(java.io.PrintStream out,
                    int indent)

store

abstract int store(byte[] buf,
                   int index)

size

abstract int size()

resolveOffset

final int resolveOffset(int pc)

storeInt

static int storeInt(byte[] buf,
                    int index,
                    int v)

storeShort

static int storeShort(byte[] buf,
                      int index,
                      short v)

read

static Insn read(InsnReadEnv insnEnv)

loadStoreDataType

public static final int loadStoreDataType(int opcode)
Return the type of value manipulated by the load/store instruction