at.dms.kjc
Class CBodyContext

java.lang.Object
  extended by at.dms.util.Utils
      extended by at.dms.kjc.CContext
          extended by at.dms.kjc.CBodyContext
All Implemented Interfaces:
Constants, DeepCloneable, Serializable
Direct Known Subclasses:
CBlockContext, CCatchContext, CLabeledContext, CLoopContext, CSimpleBodyContext, CSwitchBodyContext, CSwitchGroupContext, CTryContext

public abstract class CBodyContext
extends CContext

This class represents a local context during checkBody It follows the control flow and maintain informations about variable (initialized, 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:
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 CBodyContext()
           
protected CBodyContext(CBodyContext parent)
          Construct a block context, it supports local variable allocation throw statement and return statement This starts a new context in a method
protected CBodyContext(CBodyContext parent, CBodyContext source)
           
protected CBodyContext(CMethodContext parent)
          Construct a block context, it supports local variable allocation throw statement and return statement This starts a new context in a method
 
Method Summary
 void addBreak(JStatement target)
           
protected  void addBreak(JStatement target, CBodyContext context)
           
 void addContinue(JStatement target)
           
protected  void addContinue(JStatement target, CBodyContext context)
           
 void addThrowable(CThrowableInfo throwable)
           
 void adopt(CBodyContext source)
           
 void adoptFieldInfos(CContext source)
           
 void adoptFlowState(CBodyContext source)
           
 void adoptThrowables(CBodyContext source)
           
 void adoptVariableInfos(CBodyContext source)
           
 void clearFlowState()
           
 void clearThrowables()
           
 CSimpleBodyContext cloneContext()
          Returns a copy of this context.
 void close(TokenReference ref)
          Verify everything is okay at the end of this context
 Object deepClone()
          Returns a deep clone of this object.
protected  void deepCloneInto(CBodyContext other)
          Clones all fields of this into
 void dumpContext(int level)
          Dumps this context to standard error stream.
 CVariableInfo getFieldInfo()
          Returns the field definition state.
 int getFieldInfo(int index)
           
 JStatement getLabeledStatement(String label)
          Returns the statement with the specified label.
 JStatement getNearestBreakableStatement()
          Returns the innermost statement which can be target of a break statement without label.
 JStatement getNearestContinuableStatement()
          Returns the innermost statement which can be target of a continue statement without label.
 Hashtable getThrowables()
           
protected  CVariableInfo getVariableInfo()
           
 int getVariableInfo(int index)
          BUGGY CUT AND PASTE JAVADOC.
 boolean isBreaked()
           
 boolean isContinued()
           
 boolean isInLoop()
          Returns true iff execution is in the body of a loop.
 boolean isReachable()
          Returns true iff the statement is reachable.
 int localsPosition()
           
 JExpression lookupOuterLocalVariable(TokenReference ref, String ident)
          lookupOuterLocalVariable
 void merge(CBodyContext source)
           
 void mergeFieldInfos(CBodyContext source)
           
 void mergeFlowState(CBodyContext source)
           
 void mergeThrowables(CBodyContext source)
           
 void mergeVariableInfos(CBodyContext source)
           
 void setFieldInfo(int index, int info)
           
 void setInLoop(boolean inloop)
          Declares execution to be in the body of a loop.
 void setReachable(boolean reachable)
          Declares next statement to be reachable.
 void setVariableInfo(int index, int info)
           
 
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

CBodyContext

protected CBodyContext()

CBodyContext

protected CBodyContext(CBodyContext parent)
Construct a block context, it supports local variable allocation throw statement and return statement This starts a new context in a method

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

CBodyContext

protected CBodyContext(CMethodContext parent)
Construct a block context, it supports local variable allocation throw statement and return statement This starts a new context in a method

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

CBodyContext

protected CBodyContext(CBodyContext parent,
                       CBodyContext source)
Method Detail

cloneContext

public final CSimpleBodyContext cloneContext()
Returns a copy of this context.


close

public void close(TokenReference ref)
Verify everything is okay at the end of this context


merge

public void merge(CBodyContext source)

adopt

public void adopt(CBodyContext source)

adoptFlowState

public void adoptFlowState(CBodyContext source)

mergeFlowState

public void mergeFlowState(CBodyContext source)

adoptVariableInfos

public void adoptVariableInfos(CBodyContext source)

mergeVariableInfos

public void mergeVariableInfos(CBodyContext source)

adoptFieldInfos

public void adoptFieldInfos(CContext source)

mergeFieldInfos

public void mergeFieldInfos(CBodyContext source)

lookupOuterLocalVariable

public JExpression lookupOuterLocalVariable(TokenReference ref,
                                            String ident)
lookupOuterLocalVariable

Parameters:
ident - the name of the variable
Returns:
a variable from an ident in upperclass context

clearFlowState

public void clearFlowState()

setInLoop

public void setInLoop(boolean inloop)
Declares execution to be in the body of a loop.

Parameters:
inloop - is execution in the body of a loop ?

isInLoop

public boolean isInLoop()
Returns true iff execution is in the body of a loop.


setReachable

public void setReachable(boolean reachable)
Declares next statement to be reachable.

Parameters:
reachable - is the next statement reachable ?

isReachable

public boolean isReachable()
Returns true iff the statement is reachable.


addBreak

public void addBreak(JStatement target)

addBreak

protected void addBreak(JStatement target,
                        CBodyContext context)

isBreaked

public boolean isBreaked()
Returns:
if this context was set unreachable by a break stmt

addContinue

public void addContinue(JStatement target)

addContinue

protected void addContinue(JStatement target,
                           CBodyContext context)

isContinued

public boolean isContinued()
Returns:
if this context was set unreachable by a continue stmt

localsPosition

public int localsPosition()

getLabeledStatement

public JStatement getLabeledStatement(String label)
Returns the statement with the specified label.


getNearestBreakableStatement

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


getNearestContinuableStatement

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


getVariableInfo

protected CVariableInfo getVariableInfo()

setVariableInfo

public void setVariableInfo(int index,
                            int info)
Parameters:
index - The variable position in method array of local vars
info - The information to add We make it a local copy of this information and at the end of this context we will transfer it to the parent context according to controlFlow

getVariableInfo

public int getVariableInfo(int index)
BUGGY CUT AND PASTE JAVADOC.

Parameters:
index - the definition of a variable
Returns:
all informations we have about this variable

setFieldInfo

public void setFieldInfo(int index,
                         int info)
Overrides:
setFieldInfo in class CContext
Parameters:
index - The field position in method array of local vars
info - The information to add We make it a local copy of this information and at the end of this context we will transfert it to the parent context according to controlFlow

getFieldInfo

public int getFieldInfo(int index)
Overrides:
getFieldInfo in class CContext
Parameters:
index - the definition of a field
Returns:
all informations we have about this field

getFieldInfo

public CVariableInfo getFieldInfo()
Returns the field definition state.

Overrides:
getFieldInfo in class CContext

clearThrowables

public void clearThrowables()

addThrowable

public void addThrowable(CThrowableInfo throwable)
Parameters:
throwable - the type of the new throwable

mergeThrowables

public void mergeThrowables(CBodyContext source)

adoptThrowables

public void adoptThrowables(CBodyContext source)

getThrowables

public Hashtable getThrowables()
Returns:
the list of exception that may be thrown

dumpContext

public void dumpContext(int level)
Dumps this context to standard error stream.

Overrides:
dumpContext in class CContext

deepClone

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

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

deepCloneInto

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