at.dms.kjc
Class CodeSequence

java.lang.Object
  |
  +--at.dms.util.Utils
        |
        +--at.dms.kjc.CodeSequence
All Implemented Interfaces:
Constants

public final class CodeSequence
extends Utils
implements Constants

Code sequence is used as a bag to hold lists of instructions until it is time to put them into a class file. Note: Local variables are currently not used.


Inner Class Summary
(package private)  class CodeSequence.LabelResolvingTransformer
          Helper class to resolve labels.
 
Fields inherited from class at.dms.util.Utils
DBG_LEVEL_HIGH, DBG_LEVEL_LOW, DBG_LEVEL_NO
 
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
 
Method Summary
 void addExceptionHandler(HandlerInfo info)
          Add an exception handler to this code.
 boolean discardValue()
           
static void endSession()
          ...
static CodeSequence getCodeSequence()
          Constructs a code sequence.
 HandlerInfo[] getHandlers()
          Returns an array of all exception handler.
 Instruction[] getInstructionArray()
          Return the instruction as a list.
 Instruction getInstructionAt(int pc)
          Returns the instruction at a given position.
 LineNumberInfo[] getLineNumbers()
           
 LocalVariableInfo[] getLocalVariableInfos()
           
 int getPC()
          Gets the location in code sequence.
 void plantBreak(JStatement top)
          Ask the code handler to generate the necessary code to call every finally and monitorexit.
 void plantInstruction(Instruction instruction)
          Adds an instruction to the code of the current method.
 void plantLabel(CodeLabel label)
          Adds an instruction to the code of the current method.
 void plantLabelRef(int opcode, CodeLabel label)
          Adds an instruction to the code of the current method.
 void plantLabelRef(java.lang.String debugIdent, int opcode, CodeLabel label)
           
 void plantLoadThis()
          Adds a load of this (local var 0)
 void plantLocalVar(int opcode, JLocalVariable var)
          Adds a local var instruction to the code of the current method.
 void plantReturn(JReturnStatement ret)
          Ask the code handler to generate the necessary code to call every finally clause of all try statements.
 void popContext(JStatement statement)
          Informs the code handlers that we exit a breakable code.
 void pushContext(JStatement statement)
          Informs the code handlers that we begin a portion of breakable code.
 void release()
          Release a code sequence.
 void setDiscardValue(boolean discardValue)
           
 void setLineNumber(int lineNumber)
           
 int size()
          Returns the actual size of code.
 
Methods inherited from class at.dms.util.Utils
assert, assert, fail, fail, hasFlag, hasMoreThanOneFlag, hasOtherFlags, splitQualifiedName, splitQualifiedName, vectorToArray, vectorToIntArray
 
Methods inherited from class java.lang.Object
, clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

getCodeSequence

public static CodeSequence getCodeSequence()
Constructs a code sequence.

release

public void release()
Release a code sequence.

endSession

public static void endSession()
...

plantInstruction

public final void plantInstruction(Instruction instruction)
Adds an instruction to the code of the current method.
Parameters:
instruction - the instruction to append

plantLocalVar

public final void plantLocalVar(int opcode,
                                JLocalVariable var)
Adds a local var instruction to the code of the current method.
Parameters:
instruction - the instruction to append

plantLoadThis

public final void plantLoadThis()
Adds a load of this (local var 0)
Parameters:
instruction - the instruction to append

plantLabelRef

public final void plantLabelRef(int opcode,
                                CodeLabel label)
Adds an instruction to the code of the current method.
Parameters:
instruction - the instruction to append

plantLabelRef

public final void plantLabelRef(java.lang.String debugIdent,
                                int opcode,
                                CodeLabel label)

plantLabel

public final void plantLabel(CodeLabel label)
Adds an instruction to the code of the current method.
Parameters:
instruction - the instruction to append

setLineNumber

public final void setLineNumber(int lineNumber)
Parameters:
lineNumber - the current line number in source code.

getLineNumbers

public final LineNumberInfo[] getLineNumbers()
Returns:
an array of line number information.

getLocalVariableInfos

public final LocalVariableInfo[] getLocalVariableInfos()
Returns:
an array of local vars information..

setDiscardValue

public final void setDiscardValue(boolean discardValue)
Parameters:
discardValue - Set if the value of subexpression should be discarded.

discardValue

public final boolean discardValue()
Returns:
true if super expression use value of sub expression.

plantReturn

public final void plantReturn(JReturnStatement ret)
Ask the code handler to generate the necessary code to call every finally clause of all try statements. Doesn't not really insert a return!

plantBreak

public final void plantBreak(JStatement top)
Ask the code handler to generate the necessary code to call every finally and monitorexit.

pushContext

public final void pushContext(JStatement statement)
Informs the code handlers that we begin a portion of breakable code.

popContext

public final void popContext(JStatement statement)
Informs the code handlers that we exit a breakable code. Checks that contexts match.

addExceptionHandler

public final void addExceptionHandler(HandlerInfo info)
Add an exception handler to this code.

getHandlers

public final HandlerInfo[] getHandlers()
Returns an array of all exception handler.

getPC

public final int getPC()
Gets the location in code sequence.

size

public final int size()
Returns the actual size of code. (number of instruction)

getInstructionAt

public final Instruction getInstructionAt(int pc)
Returns the instruction at a given position.

getInstructionArray

public Instruction[] getInstructionArray()
Return the instruction as a list. WARNING: AFTER a call to release() this array will be reused
Parameters:
instruction - the instruction to append.