at.dms.classfile
Class Instruction

java.lang.Object
  |
  +--at.dms.classfile.AbstractInstructionAccessor
        |
        +--at.dms.classfile.Instruction
All Implemented Interfaces:
Constants, InstructionAccessor
Direct Known Subclasses:
ClassRefInstruction, FieldRefInstruction, IincInstruction, InvokeinterfaceInstruction, JumpInstruction, LocalVarInstruction, MethodRefInstruction, MultiarrayInstruction, NewarrayInstruction, NoArgInstruction, PushLiteralInstruction, SwitchInstruction

public abstract class Instruction
extends AbstractInstructionAccessor
implements Constants

Root class for instructions. An instruction is defined by its opcode and its arguments.


Fields inherited from interface at.dms.classfile.Constants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_NBR_FLAGS, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_TRANSIENT, ACC_VOLATILE, ATT_CODE, ATT_CONSTANTVALUE, ATT_DEPRECATED, ATT_EXCEPTIONS, ATT_GENERIC, ATT_INNERCLASSES, ATT_LINENUMBERTABLE, ATT_LOCALVARIABLETABLE, ATT_SOURCEFILE, ATT_SYNTHETIC, CST_CLASS, CST_DOUBLE, CST_FIELD, CST_FLOAT, CST_INTEGER, CST_INTERFACEMETHOD, CST_LONG, CST_METHOD, CST_NAMEANDTYPE, CST_STRING, CST_UTF8, ENV_DEBUG_MODE, ENV_USE_CACHE, JAVA_MAGIC, JAVA_MAJOR, JAVA_MINOR, MAX_CODE_PER_METHOD, 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_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, opc_xxxunusedxxx, POO_ASCII_CONSTANT, POO_CLASS_CONSTANT, POO_DOUBLE_CONSTANT, POO_FLOAT_CONSTANT, POO_INTEGER_CONSTANT, POO_LONG_CONSTANT, POO_NAT_CONSTANT, POO_REF_CONSTANT, POO_STRING_CONSTANT, TYP_ADDRESS, TYP_DOUBLE, TYP_FLOAT, TYP_INT, TYP_LONG, TYP_REFERENCE, TYP_VOID
 
Constructor Summary
Instruction(int opcode)
          Constructs a new instruction.
 
Method Summary
abstract  boolean canComplete()
          Returns true iff control flow can reach the next instruction in textual order after executing this instruction.
(package private)  void check(CodeEnv env, int curStack)
          Verifies the enclosed instruction and computes the stack height.
(package private)  void computeEndAddress(CodePosition position)
          Computes the address of the end of the instruction.
 void dump()
           
(package private)  int getAddress()
          Returns the offset in bytes of the instruction from the beginning of the method code (ie classfile).
(package private)  int getLocalVar()
          Returns the maximum index of local vars used by this instruction.
 int getOpcode()
          Returns the opcode of the instruction
 int getPoppedFromStack()
          Returns the size of data pushed on the stack by this instruction
abstract  int getPushedOnStack()
          Returns the size of data pushed on the stack by this instruction
abstract  byte getReturnType()
          Returns the type pushed on the stack
(package private) abstract  int getSize()
          Returns the number of bytes used by the the instruction in the code array.
abstract  int getStack()
          Returns the amount of stack (positive or negative) used by this instruction.
 boolean isLiteral()
          Returns true iff this instruction is a literal.
(package private) abstract  void resolveConstants(ConstantPool cp)
          Inserts or checks location of constant value in constant pool
(package private)  void setAddress(int address)
          Sets the the offset in bytes of the instruction from the beginning of the method code
(package private)  void setOpcode(int opcode)
          Returns the opcode of the instruction Needed by PushLiteralInstruction
(package private) abstract  void write(ConstantPool cp, java.io.DataOutput out)
          Write this class into the the file (out) getting data position from the constant pool.
 
Methods inherited from class at.dms.classfile.AbstractInstructionAccessor
transform
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Instruction

public Instruction(int opcode)
Constructs a new instruction.
Parameters:
opcode - The opcode of the instruction.
Method Detail

getOpcode

public final int getOpcode()
Returns the opcode of the instruction

setOpcode

final void setOpcode(int opcode)
Returns the opcode of the instruction Needed by PushLiteralInstruction

getAddress

final int getAddress()
Returns the offset in bytes of the instruction from the beginning of the method code (ie classfile).

setAddress

final void setAddress(int address)
Sets the the offset in bytes of the instruction from the beginning of the method code

getSize

abstract int getSize()
Returns the number of bytes used by the the instruction in the code array.

getLocalVar

int getLocalVar()
Returns the maximum index of local vars used by this instruction.

check

void check(CodeEnv env,
           int curStack)
     throws ClassFileFormatException
Verifies the enclosed instruction and computes the stack height.
Parameters:
env - the check environment
curStack - the stack height at the end of the execution of the instruction
Returns:
true iff the next instruction in textual order needs to be checked, i.e. this instruction has not been checked before and it can complete normally
Throws:
ClassFileFormatException - a problem was detected

computeEndAddress

void computeEndAddress(CodePosition position)
Computes the address of the end of the instruction.
Parameters:
position - The minimum and maximum address of the begin of this instruction. This parameter is changed to the minimum and maximum address of the end of this instruction.

getReturnType

public abstract byte getReturnType()
Returns the type pushed on the stack

getStack

public abstract int getStack()
Returns the amount of stack (positive or negative) used by this instruction.

getPushedOnStack

public abstract int getPushedOnStack()
Returns the size of data pushed on the stack by this instruction

getPoppedFromStack

public final int getPoppedFromStack()
Returns the size of data pushed on the stack by this instruction

isLiteral

public boolean isLiteral()
Returns true iff this instruction is a literal.

canComplete

public abstract boolean canComplete()
Returns true iff control flow can reach the next instruction in textual order after executing this instruction.

resolveConstants

abstract void resolveConstants(ConstantPool cp)
Inserts or checks location of constant value in constant pool
Parameters:
cp - the constant pool for this class

write

abstract void write(ConstantPool cp,
                    java.io.DataOutput out)
             throws java.io.IOException
Write this class into the the file (out) getting data position from the constant pool.
Parameters:
cp - The constant pool that contain all data.
out - The file where to write this object info.
Throws:
java.io.IOException - An io problem has occured

dump

public void dump()