at.dms.classfile
Class IincInstruction

java.lang.Object
  |
  +--at.dms.classfile.AbstractInstructionAccessor
        |
        +--at.dms.classfile.Instruction
              |
              +--at.dms.classfile.IincInstruction
All Implemented Interfaces:
Constants, InstructionAccessor

public class IincInstruction
extends Instruction

Some instructions are perniticky enough that its simpler to write them separately instead of smushing them with all the rest. the iinc instruction is one of them. A wide prefix is automatically added if either the variable index exceeds 256, or the increment value lies outside the range [-128, 127] The VM spec is unclear on how the wide instruction is implemented, but the implementation makes both the constant and the variable index 16 bit values for the wide version of this instruction.


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
IincInstruction(int var, int inc)
          Constructs a new iinc instruction
 
Method Summary
 boolean canComplete()
          Returns true iff control flow can reach the next instruction in textual order.
 int getIncrement()
          Return the value that is added to this variable
 int getPushedOnStack()
          Returns the size of data pushed on the stack by this instruction
 byte getReturnType()
          Returns the type pushed on the stack
(package private)  int getSize()
          Returns the number of bytes used by the the instruction in the code array.
 int getStack()
          Return the amount of stack (positive or negative) used by this instruction.
 int getVariable()
          Return the position of this variable in the local var set
(package private)  void resolveConstants(ConstantPool cp)
          Insert or check location of constant value on constant pool
(package private)  void write(ConstantPool cp, java.io.DataOutput out)
          Write this instruction into a file
 
Methods inherited from class at.dms.classfile.Instruction
check, computeEndAddress, dump, getAddress, getLocalVar, getOpcode, getPoppedFromStack, isLiteral, setAddress, setOpcode
 
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

IincInstruction

public IincInstruction(int var,
                       int inc)
Constructs a new iinc instruction
Parameters:
var - the index of the variable to be incremented.
inc - value to be added to the variable.
Method Detail

canComplete

public boolean canComplete()
Returns true iff control flow can reach the next instruction in textual order.
Overrides:
canComplete in class Instruction

resolveConstants

void resolveConstants(ConstantPool cp)
Insert or check location of constant value on constant pool
Overrides:
resolveConstants in class Instruction
Parameters:
cp - the constant pool for this class

getSize

int getSize()
Returns the number of bytes used by the the instruction in the code array.
Overrides:
getSize in class Instruction

getIncrement

public int getIncrement()
Return the value that is added to this variable

getVariable

public int getVariable()
Return the position of this variable in the local var set

getReturnType

public byte getReturnType()
Returns the type pushed on the stack
Overrides:
getReturnType in class Instruction

getPushedOnStack

public int getPushedOnStack()
Returns the size of data pushed on the stack by this instruction
Overrides:
getPushedOnStack in class Instruction

getStack

public int getStack()
Return the amount of stack (positive or negative) used by this instruction.
Overrides:
getStack in class Instruction

write

void write(ConstantPool cp,
           java.io.DataOutput out)
     throws java.io.IOException
Write this instruction into a file
Overrides:
write in class Instruction
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