at.dms.kjc
Class CodeSequence

java.lang.Object
  extended by at.dms.util.Utils
      extended by at.dms.kjc.CodeSequence
All Implemented Interfaces:
Constants, DeepCloneable, Serializable

public final class CodeSequence
extends Utils
implements Constants

See Also:
Serialized Form

Field Summary
 
Fields inherited from class at.dms.util.Utils
EMPTY_LIST, getForLoopCallers
 
Fields inherited from interface at.dms.kjc.Constants
CMP_VERSION, JAV_CLASS, JAV_CLONE, JAV_CLONEABLE, JAV_CONSTRUCTOR, JAV_ERROR, JAV_EXCEPTION, JAV_INIT, JAV_LENGTH, JAV_NAME_SEPARATOR, JAV_OBJECT, JAV_OUTER_THIS, JAV_RUNTIME, JAV_RUNTIME_EXCEPTION, JAV_STATIC_INIT, JAV_STRING, JAV_STRINGBUFFER, JAV_THIS, JAV_THROWABLE, OPE_BAND, OPE_BNOT, OPE_BOR, OPE_BSR, OPE_BXOR, OPE_EQ, OPE_GE, OPE_GT, OPE_LE, OPE_LNOT, OPE_LT, OPE_MINUS, OPE_NE, OPE_PERCENT, OPE_PLUS, OPE_POSTDEC, OPE_POSTINC, OPE_PREDEC, OPE_PREINC, OPE_SIMPLE, OPE_SL, OPE_SLASH, OPE_SR, OPE_STAR, TID_ARRAY, TID_BIT, TID_BOOLEAN, TID_BYTE, TID_CHAR, TID_CLASS, TID_DOUBLE, TID_FLOAT, TID_INT, TID_LONG, TID_SHORT, TID_VECTOR, TID_VOID, VECTOR_EMPTY
 
Fields inherited from interface at.dms.classfile.Constants
ACC_ABSTRACT, ACC_FINAL, ACC_INLINE, ACC_INTERFACE, ACC_NATIVE, 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(int start, int end, int handler, String thrown)
           
 Object deepClone()
          Returns a deep clone of this object.
protected  void deepCloneInto(CodeSequence other)
          Clones all fields of this into
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 WARNING: AFTER a call to release() this array will be reused
 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 plantClassRefInstruction(int opcode, String name)
          Adds a class reference instruction to the code of the current method.
 void plantFieldRefInstruction(int opcode, String owner, String name, String type)
          Adds a field reference instruction to the code of the current method.
 void plantInstruction(Instruction insn)
          Adds an instruction to the code of the current method.
 void plantJumpInstruction(int opcode, at.dms.kjc.CodeLabel target)
          Adds an jump instruction to the code of the current method.
 void plantLabel(at.dms.kjc.CodeLabel label)
          Adds an instruction to the code of the current method.
 void plantLoadThis()
          Adds a load of this (local var 0) to the code of the current method.
 void plantLocalVar(int opcode, JLocalVariable var)
          Adds a local var instruction to the code of the current method.
 void plantMethodRefInstruction(int opcode, String owner, String name, String type)
          Adds a method reference instruction to the code of the current method.
 void plantNewArrayInstruction(CType type)
          Appends an array creation instruction to the code of the current method.
 void plantNoArgInstruction(int opcode)
          Appends an instruction without arguments to the code of the current method.
 void plantPopInstruction(CType type)
          Appends an instruction to the code of the current method which pops the top-most element from the stack.
 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 stmt)
          Informs the code handlers that we exit a breakable code.
 void pushContext(JStatement stmt)
          Informs the code handlers that we begin a portion of breakable code.
 void release()
          Release a code sequence
 void setLineNumber(int lineNumber)
           
 int size()
          Returns the actual size of code (number of instruction)
 
Methods inherited from class at.dms.util.Utils
asPercent, cellMathEquivalent, cMathEquivalent, cppMathEquivalent, deepCloneInto, equalArrays, fail, getEnvironmentVariable, getExpression, hasPeeks, initArray, initArray, initLiteralArray, intArrayToList, isMathMethod, isUniform, kopi_assert, kopi_assert, makeCountdownForLoop, makeDotFileName, makeForLoop, makeForLoop, makeForLoop, makeForLoopFieldIndex, makeForLoopLocalIndex, nextPow2, passThruParens, peelMarkers, popBeforePeek, readFile, removeUnusedPops, replaceAll, setupDotFileName, simplifyMathMethod, splitQualifiedName, splitQualifiedName, toArray, toIntArray, toVector, voidToInt, writeFile
 
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 insn)
Adds an instruction to the code of the current method.

Parameters:
insn - the instruction to append

plantNoArgInstruction

public final void plantNoArgInstruction(int opcode)
Appends an instruction without arguments to the code of the current method.

Parameters:
opcode - the instruction opcode

plantPopInstruction

public final void plantPopInstruction(CType type)
Appends an instruction to the code of the current method which pops the top-most element from the stack.

Parameters:
type - the type of the top-most element

plantLocalVar

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

Parameters:
opcode - the instruction opcode
var - the referenced variable

plantLoadThis

public final void plantLoadThis()
Adds a load of this (local var 0) to the code of the current method.


plantFieldRefInstruction

public final void plantFieldRefInstruction(int opcode,
                                           String owner,
                                           String name,
                                           String type)
Adds a field reference instruction to the code of the current method.

Parameters:
opcode - the instruction opcode
owner - the qualified name of the class containing the field
name - the simple name of the referenced field
type - the signature of the referenced field

plantMethodRefInstruction

public final void plantMethodRefInstruction(int opcode,
                                            String owner,
                                            String name,
                                            String type)
Adds a method reference instruction to the code of the current method.

Parameters:
opcode - the instruction opcode
owner - the qualified name of the class containing the method
name - the simple name of the referenced method
type - the signature of the referenced method

plantClassRefInstruction

public final void plantClassRefInstruction(int opcode,
                                           String name)
Adds a class reference instruction to the code of the current method.

Parameters:
opcode - the instruction opcode
name - the qualified name of the referenced object

plantJumpInstruction

public final void plantJumpInstruction(int opcode,
                                       at.dms.kjc.CodeLabel target)
Adds an jump instruction to the code of the current method.

Parameters:
opcode - the instruction opcode
target - the jump target

plantNewArrayInstruction

public final void plantNewArrayInstruction(CType type)
Appends an array creation instruction to the code of the current method.

Parameters:
type - the element type

plantLabel

public final void plantLabel(at.dms.kjc.CodeLabel label)
Adds an instruction to the code of the current method.

Parameters:
label -

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

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


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 stmt)
Informs the code handlers that we begin a portion of breakable code.


popContext

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


addExceptionHandler

public final void addExceptionHandler(int start,
                                      int end,
                                      int handler,
                                      String thrown)

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


deepClone

public Object deepClone()
Returns a deep clone of this object.

Specified by:
deepClone in interface DeepCloneable
Overrides:
deepClone in class Utils

deepCloneInto

protected void deepCloneInto(CodeSequence other)
Clones all fields of this into
other