at.dms.kjc
Class CBlockContext

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.CBlockContext
All Implemented Interfaces:
Constants, DeepCloneable, Serializable
Direct Known Subclasses:
CTryFinallyContext

public class CBlockContext
extends CBodyContext

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:
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 CBlockContext()
           
  CBlockContext(CBodyContext parent)
          Construct a block context, it supports local variable allocation throw statement and return statement
  CBlockContext(CBodyContext parent, int predictedVars)
          Construct a block context, it supports local variable allocation throw statement and return statement
 
Method Summary
 void addClass(CClass clazz)
          addLocalClass
 void addThisVariable()
          addLocal variable
 void addVariable(JLocalVariable var)
          addLocal variable
 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(CBlockContext other)
          Clones all fields of this into
 CBlockContext getBlockContext()
          Returns the nearest block context (Where yuo can define some local vars)
 int localsIndex()
           
 int localsPosition()
           
 CClassType lookupClass(CClass caller, String ident)
          lookupClass search for a class with the provided type parameters
 JLocalVariable lookupLocalVariable(String ident)
          lookupLocalVariable
 
Methods inherited from class at.dms.kjc.CBodyContext
addBreak, addBreak, addContinue, addContinue, addThrowable, adopt, adoptFieldInfos, adoptFlowState, adoptThrowables, adoptVariableInfos, clearFlowState, clearThrowables, cloneContext, deepCloneInto, dumpContext, getFieldInfo, getFieldInfo, getLabeledStatement, getNearestBreakableStatement, getNearestContinuableStatement, getThrowables, getVariableInfo, getVariableInfo, isBreaked, isContinued, isInLoop, isReachable, 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, getClassContext, getCompilationUnitContext, getMethodContext, getParentContext, isStaticContext, lookupField, 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

CBlockContext

protected CBlockContext()

CBlockContext

public CBlockContext(CBodyContext parent)
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

CBlockContext

public CBlockContext(CBodyContext parent,
                     int predictedVars)
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
Method Detail

close

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

Overrides:
close in class CBodyContext

addVariable

public void addVariable(JLocalVariable var)
                 throws UnpositionedError
addLocal variable

Parameters:
var - the name of the variable
Throws:
UnpositionedError - this error will be positioned soon

lookupLocalVariable

public JLocalVariable lookupLocalVariable(String ident)
lookupLocalVariable

Overrides:
lookupLocalVariable in class CContext
Parameters:
ident - the name of the variable
Returns:
a variable from an ident in current context

addThisVariable

public void addThisVariable()
addLocal variable


localsPosition

public int localsPosition()
Overrides:
localsPosition in class CBodyContext

localsIndex

public int localsIndex()

getBlockContext

public CBlockContext getBlockContext()
Description copied from class: CContext
Returns the nearest block context (Where yuo can define some local vars)

Overrides:
getBlockContext in class CContext

addClass

public void addClass(CClass clazz)
              throws UnpositionedError
addLocalClass

Parameters:
clazz - the clazz to add
Throws:
UnpositionedError - this error will be positioned soon

lookupClass

public CClassType lookupClass(CClass caller,
                              String ident)
                       throws UnpositionedError
lookupClass search for a class with the provided type parameters

Overrides:
lookupClass in class CContext
Parameters:
caller - the class of the caller
ident - the class name
Returns:
the class if found, null otherwise
Throws:
UnpositionedError - this error will be positioned soon

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(CBlockContext other)
Clones all fields of this into
other