at.dms.kjc
Class CBlockContext

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

public class CBlockContext
extends CAbstractBodyContext

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

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
  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.
(package private) CBlockContext(CMethodContext parent, int localVars)
          Construct a block context, it supports local variable allocation throw statement and return statement.
 
Method Summary
 void addClass(CClass clazz)
          addLocalClass
 void addOuterThisVariable()
          addOuterThisVariable: make room for outerThis variable in a constructor.
 void addThisVariable()
          addThisVariable: make room for this variable.
 void addVariable(JLocalVariable var)
          addLocal variable.
 void addVariableInfo(int index, int info)
          Adds new assignment info to existing assignment info.
 CBodyContext cloneContext()
           
 void close(TokenReference ref)
          Verify everything is okay at the end of this context
 CBodyContext createBodyContext()
          Creates a new body context with this block context as its parent.
 void dereferenceVariable(JLocalVariable var)
          Dereference a variable that is not used after (exit block)
 CBlockContext getBlockContext()
          Returns the nearest block context.
 int getMaxLocalsIndex()
          The maximum local index for the method in which this is a block.
 int getMaxLocalsPosition()
          The maximum locals position in the local variables of the bytecode for the method in which this is a block.
 int getVariableInfo(int index)
           
 CClassType lookupClass(java.lang.String name)
          lookupClass search for a class with the provided type parameters
 CClass lookupLocalClass(java.lang.String ident)
          lookupLocalClass
 JLocalVariable lookupLocalVariable(java.lang.String ident)
          lookupLocalVariable
 void shiftLocalsPositions(int shift)
          Shifts the positions of the locals in this block.
 
Methods inherited from class at.dms.kjc.CAbstractBodyContext
addBreak, addBreak, addContinue, addContinue, addFieldInfo, addForwardedBreak, addForwardedContinue, addReturn, addThrowable, addThrowables, getFieldInfo, getFlowState, getLabeledStatement, getNearestBreakableStatement, getNearestContinuableStatement, getThrowables, informParent, isBreaked, isContinued, isInLoop, isReachable, lookupField, lookupOuterLocalVariable, setFieldInfo, setReachable, setVariableInfo
 
Methods inherited from class at.dms.kjc.CContext
addSourceClass, check, check, check, fail, getClassContext, getCompilationUnit, getCompiler, getMethodContext, getParentContext, 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

CBlockContext

CBlockContext(CMethodContext parent,
              int localVars)
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)
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

createBodyContext

public CBodyContext createBodyContext()
Creates a new body context with this block context as its parent.

close

public void close(TokenReference ref)
Verify everything is okay at the end of this context
Overrides:
close in class CAbstractBodyContext

cloneContext

public CBodyContext cloneContext()

getVariableInfo

public int getVariableInfo(int index)
Overrides:
getVariableInfo in class CAbstractBodyContext
Parameters:
var - the definition of a variable
Returns:
all informations we have about this variable

addVariableInfo

public void addVariableInfo(int index,
                            int info)
Description copied from class: CAbstractBodyContext
Adds new assignment info to existing assignment info.
Overrides:
addVariableInfo in class CAbstractBodyContext
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 transfert it to the parent context according to controlFlow.

addVariable

public void addVariable(JLocalVariable var)
                 throws UnpositionedError
addLocal variable.
Parameters:
var - the name of the variable
initialized - is the varaible already initialized
Throws:
UnpositionedError - this error will be positioned soon

shiftLocalsPositions

public void shiftLocalsPositions(int shift)
Shifts the positions of the locals in this block. This is necessary in constructors of local classes, where a variable number of synthetic constructor parameters (the values of the outer local variables) may be inserted after other local have already been assigned a position.

lookupLocalVariable

public JLocalVariable lookupLocalVariable(java.lang.String ident)
lookupLocalVariable
Overrides:
lookupLocalVariable in class CAbstractBodyContext
Parameters:
ident - the name of the variable
Returns:
a variable from an ident in current context

dereferenceVariable

public void dereferenceVariable(JLocalVariable var)
Dereference a variable that is not used after (exit block)

addThisVariable

public void addThisVariable()
addThisVariable: make room for this variable.

addOuterThisVariable

public void addOuterThisVariable()
addOuterThisVariable: make room for outerThis variable in a constructor.

getMaxLocalsPosition

public int getMaxLocalsPosition()
The maximum locals position in the local variables of the bytecode for the method in which this is a block.
Overrides:
getMaxLocalsPosition in class CAbstractBodyContext

getMaxLocalsIndex

public int getMaxLocalsIndex()
The maximum local index for the method in which this is a block.

getBlockContext

public CBlockContext getBlockContext()
Description copied from class: CContext
Returns the nearest block context.
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

lookupLocalClass

public CClass lookupLocalClass(java.lang.String ident)
lookupLocalClass
Parameters:
ident - the name of the class
Returns:
a class from an ident in current context

lookupClass

public CClassType lookupClass(java.lang.String name)
                       throws UnpositionedError
lookupClass search for a class with the provided type parameters
Overrides:
lookupClass in class CContext
Parameters:
name - method name
Returns:
the class if found, null otherwise
Throws:
UnpositionedError - this error will be positioned soon