at.dms.kjc
Class CSwitchBodyContext

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

public class CSwitchBodyContext
extends CBodyContext

This class represents a local context during checkBody It follows the control flow and maintain informations about variable (initialised, used, allocated), exceptions (thrown, catched) It also verify that context is still reachable There is a set of utilities method to access fields, methods and class with the name by clamping the parsing tree

See Also:
CCompilationUnitContext, CClassContext, CMethodContext, CContext, Serialized Form

Field Summary
 
Fields inherited from class at.dms.kjc.CContext
parent
 
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
 
Constructor Summary
protected CSwitchBodyContext()
           
  CSwitchBodyContext(CBodyContext parent, JSwitchStatement stmt)
          Construct a block context, it supports local variable allocation throw statement and return statement
 
Method Summary
protected  void addBreak(JStatement target, CBodyContext context)
           
 void addDefault()
          add a default label to this switch
 void addLabel(Integer value)
          add a label to this switch and check it is a new one
 void close()
          close
 Object deepClone()
          Returns a deep clone of this object.
protected  void deepCloneInto(CSwitchBodyContext other)
          Clones all fields of this into
 boolean defaultExists()
           
 JStatement getNearestBreakableStatement()
          Returns the innermost statement which can be target of a break statement without label.
 CType getType()
          Returns the type of the switch expression.
 
Methods inherited from class at.dms.kjc.CBodyContext
addBreak, addContinue, addContinue, addThrowable, adopt, adoptFieldInfos, adoptFlowState, adoptThrowables, adoptVariableInfos, clearFlowState, clearThrowables, cloneContext, close, deepCloneInto, dumpContext, getFieldInfo, getFieldInfo, getLabeledStatement, getNearestContinuableStatement, getThrowables, getVariableInfo, getVariableInfo, isBreaked, isContinued, isInLoop, isReachable, localsPosition, lookupOuterLocalVariable, merge, mergeFieldInfos, mergeFlowState, mergeThrowables, mergeVariableInfos, setFieldInfo, setInLoop, setReachable, setVariableInfo
 
Methods inherited from class at.dms.kjc.CContext
addSourceClass, check, check, check, check, deepCloneInto, dumpContext, dumpIndent, fail, fail, getBlockContext, getClassContext, getCompilationUnitContext, getMethodContext, getParentContext, isStaticContext, lookupClass, lookupField, lookupLocalVariable, lookupMethod, reportTrouble
 
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
 

Constructor Detail

CSwitchBodyContext

protected CSwitchBodyContext()

CSwitchBodyContext

public CSwitchBodyContext(CBodyContext parent,
                          JSwitchStatement stmt)
Construct a block context, it supports local variable allocation throw statement and return statement

Parameters:
parent - the parent context, it must be different than null except if called by the top level
stmt -
Method Detail

close

public void close()
close


addDefault

public void addDefault()
                throws UnpositionedError
add a default label to this switch

Throws:
UnpositionedError - this error will be positioned soon

addLabel

public void addLabel(Integer value)
              throws UnpositionedError
add a label to this switch and check it is a new one

Parameters:
value - the literal value of this label
Throws:
UnpositionedError - this error will be positioned soon

getType

public CType getType()
Returns the type of the switch expression.


defaultExists

public boolean defaultExists()
Returns:
true is a default label has already happen

getNearestBreakableStatement

public JStatement getNearestBreakableStatement()
Returns the innermost statement which can be target of a break statement without label.

Overrides:
getNearestBreakableStatement in class CBodyContext

addBreak

protected void addBreak(JStatement target,
                        CBodyContext context)
Overrides:
addBreak in class CBodyContext

deepClone

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

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

deepCloneInto

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