at.dms.kjc
Class CBodyContext

java.lang.Object
  |
  +--at.dms.util.Utils
        |
        +--at.dms.kjc.CContext
              |
              +--at.dms.kjc.CAbstractBodyContext
                    |
                    +--at.dms.kjc.CBodyContext
All Implemented Interfaces:
Constants, Constants

public class CBodyContext
extends CAbstractBodyContext

This class represents a local context during checkBody. It follows the control flow and maintain informations about variable (initialized, used, allocated) and exceptions (thrown, catched.) It also verifies if the 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:
CContext, CCompilationUnitContext, CClassContext, CMethodContext, CConstructorContext, CInitializerContext, CBodyContext, CBlockContext

Fields inherited from class at.dms.kjc.CAbstractBodyContext
fieldInfo, FLOW_BREAKED, FLOW_CONTINUED, FLOW_INLOOP, FLOW_INSWITCH, FLOW_UNREACHABLE, flowState, throwables, variableInfo
 
Fields inherited from class at.dms.kjc.CContext
cunit, parent
 
Fields inherited from class at.dms.util.Utils
DBG_LEVEL_HIGH, DBG_LEVEL_LOW, DBG_LEVEL_NO
 
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_BOOLEAN, TID_BYTE, TID_CHAR, TID_CLASS, TID_DOUBLE, TID_FLOAT, TID_INT, TID_LONG, TID_SHORT, TID_VOID
 
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
protected CBodyContext(CAbstractBodyContext parent)
          Construct a body context.
 
Method Summary
 void adopt(CBodyContext context)
          Adopt variable and field assignment information from another context.
 CBodyContext cloneContext()
          Returns a clone of this body context.
 CBlockContext createBlockContext()
          Creates a block context with this body context as its parent.
 CBlockContext createBlockContext(int params)
          Creates a block context with this body context as its parent.
 CClassContext createClassContext(CSourceClass clazz)
          Creates a class context (for inner/local classes) with this body context as its parent.
 CExpressionContext createExpressionContext()
          Creates an expression context with this body context as its parent.
 CLoopContext createLoopContext(JLoopStatement self)
          Creates a loop context with this body context as its parent.
 CTryContext createTryContext()
          Creates a try context with this body context as its parent.
 CBodyContext makeSnapshot()
          Creates a snapshot.
 void merge(CBodyContext context)
          Merge variable and field assignment information from another context with this one.
 
Methods inherited from class at.dms.kjc.CAbstractBodyContext
addBreak, addBreak, addContinue, addContinue, addFieldInfo, addForwardedBreak, addForwardedContinue, addReturn, addThrowable, addThrowables, addVariableInfo, close, getFieldInfo, getFlowState, getLabeledStatement, getMaxLocalsPosition, getNearestBreakableStatement, getNearestContinuableStatement, getThrowables, getVariableInfo, informParent, isBreaked, isContinued, isInLoop, isReachable, lookupField, lookupLocalVariable, lookupOuterLocalVariable, setFieldInfo, setReachable, setVariableInfo
 
Methods inherited from class at.dms.kjc.CContext
addSourceClass, check, check, check, fail, getBlockContext, getClassContext, getCompilationUnit, getCompiler, getMethodContext, getParentContext, lookupClass, lookupMethod, reportTrouble
 
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
 

Constructor Detail

CBodyContext

protected CBodyContext(CAbstractBodyContext parent)
Construct a body context.
Parameters:
parent - The parent context; may not be null except if called by the top level.
Method Detail

createClassContext

public CClassContext createClassContext(CSourceClass clazz)
Creates a class context (for inner/local classes) with this body context as its parent.

createBlockContext

public CBlockContext createBlockContext()
Creates a block context with this body context as its parent.

createBlockContext

public CBlockContext createBlockContext(int params)
Creates a block context with this body context as its parent.

createLoopContext

public CLoopContext createLoopContext(JLoopStatement self)
Creates a loop context with this body context as its parent.

createTryContext

public CTryContext createTryContext()
Creates a try context with this body context as its parent.

createExpressionContext

public CExpressionContext createExpressionContext()
Creates an expression context with this body context as its parent.

cloneContext

public CBodyContext cloneContext()
Returns a clone of this body context.

makeSnapshot

public CBodyContext makeSnapshot()
Creates a snapshot. A snapshot is a clone without throwables information.

merge

public void merge(CBodyContext context)
Merge variable and field assignment information from another context with this one. Merging means that unless some variable is definately assigned in both cases, it is never definately assigned afterwards.

adopt

public void adopt(CBodyContext context)
Adopt variable and field assignment information from another context. Adopting means that if the other context has some assignment information about some field or variable, it overrules any assignment information about it that is already present in this context.