at.dms.kjc
Class CContext

java.lang.Object
  |
  +--at.dms.util.Utils
        |
        +--at.dms.kjc.CContext
All Implemented Interfaces:
Constants, Constants
Direct Known Subclasses:
CAbstractBodyContext, CClassContext, CCompilationUnitContext, CExpressionContext, CMethodContext

public abstract class CContext
extends Utils
implements Constants

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 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:
CContext, CCompilationUnitContext, CClassContext, CMethodContext, CBodyContext, CBlockContext

Field Summary
protected  CCompilationUnitContext cunit
           
protected  CContext 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
  CContext()
          Construct a non-specific context.
protected CContext(CContext parent)
          Construct a non-specifick context.
 
Method Summary
 void addFieldInfo(int index, int info)
           
 void addSourceClass(CSourceClass clazz)
          Adds a class to generate.
 boolean check(boolean expr, MessageDescription mess)
          Verify an expression and if false add an error
 boolean check(boolean expr, MessageDescription mess, java.lang.Object param1)
          Verify an expression and if false add an error
 boolean check(boolean expr, MessageDescription mess, java.lang.Object param1, java.lang.Object param2)
          Verify an expression and if false add an error
 void fail(MessageDescription mess, java.lang.Object param1, java.lang.Object param2)
          Add an error into the list and eat it.
 CBlockContext getBlockContext()
          Returns the nearest block context.
 CClassContext getClassContext()
          Returns the nearest parent of type CClassContext.
 CCompilationUnitContext getCompilationUnit()
           
 Compiler getCompiler()
          Gets the compiler
 int getFieldInfo(int index)
           
 CMethodContext getMethodContext()
          Returns the nearest parent of type CMethodContext.
 CContext getParentContext()
          getParentContext
 CClassType lookupClass(java.lang.String name)
          Search for a class with the provided name.
 CField lookupField(java.lang.String ident)
          lookupLocalVariable
 JLocalVariable lookupLocalVariable(java.lang.String ident)
          lookupLocalVariable
 CMethod lookupMethod(CClass caller, java.lang.String ident, CType[] params)
          Search for a matching method with the provided type parameters.
 void reportTrouble(PositionedError trouble)
          Add an error into the list and eat it.
 
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
 

Field Detail

parent

protected CContext parent

cunit

protected CCompilationUnitContext cunit
Constructor Detail

CContext

public CContext()
Construct a non-specific context.

CContext

protected CContext(CContext parent)
Construct a non-specifick context. This constructor is for subclasses only.
Parameters:
parent - The parent context. May not be null except if called by the top level.
Method Detail

lookupClass

public CClassType lookupClass(java.lang.String name)
                       throws UnpositionedError
Search for a class with the provided name.
Parameters:
name - Method name.
Returns:
The class if found, null otherwise.
Throws:
UnpositionedError - This error will be positioned soon.

lookupMethod

public CMethod lookupMethod(CClass caller,
                            java.lang.String ident,
                            CType[] params)
                     throws UnpositionedError
Search for a matching method with the provided type parameters.
Parameters:
caller - Caller context or null for unspecified context.
ident - Method name.
params - Method parameters
Returns:
The method if found, null otherwise.
Throws:
UnpositionedError - This error will be positioned soon.

lookupField

public CField lookupField(java.lang.String ident)
                   throws UnpositionedError
lookupLocalVariable
Returns:
a variable from an ident in current context
Throws:
UnpositionedError - this error will be positioned soon

lookupLocalVariable

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

getFieldInfo

public int getFieldInfo(int index)
Parameters:
field - the definition of a field
Returns:
a field from a field definition in current context

addFieldInfo

public void addFieldInfo(int index,
                         int info)
Parameters:
field - the definition of a field
Returns:
a field from a field definition in current context

getParentContext

public CContext getParentContext()
getParentContext
Returns:
the parent

getCompilationUnit

public CCompilationUnitContext getCompilationUnit()
Returns:
the compilation unit

getClassContext

public CClassContext getClassContext()
Returns the nearest parent of type CClassContext.
Returns:
the nearest parent of type CClassContext.

getMethodContext

public CMethodContext getMethodContext()
Returns the nearest parent of type CMethodContext.
Returns:
the nearest parent of type CMethodContext.

getBlockContext

public CBlockContext getBlockContext()
Returns the nearest block context.

addSourceClass

public void addSourceClass(CSourceClass clazz)
Adds a class to generate.

reportTrouble

public void reportTrouble(PositionedError trouble)
Add an error into the list and eat it. This method should be called after a try catch block after catching exception or directly without exception thrown.
Parameters:
error - the error

fail

public void fail(MessageDescription mess,
                 java.lang.Object param1,
                 java.lang.Object param2)
          throws UnpositionedError
Add an error into the list and eat it. This method should be called after a try catch block after catching exception or directly without exception thrown.
Parameters:
mess - the error message
param1 - the first message parameter
param2 - the second message parameter
Throws:
UnpositionedError - this error will be positioned soon

check

public boolean check(boolean expr,
                     MessageDescription mess)
              throws UnpositionedError
Verify an expression and if false add an error
Parameters:
expr - condition to verify
phyl - where the error occur
mess - the message to be displayed
Returns:
the value of expr
Throws:
UnpositionedError - this error will be positioned soon

check

public boolean check(boolean expr,
                     MessageDescription mess,
                     java.lang.Object param1)
              throws UnpositionedError
Verify an expression and if false add an error
Parameters:
expr - condition to verify
mess - the message to be displayed
param1 - the first parameter
Returns:
the value of expr
Throws:
UnpositionedError - this error will be positioned soon

check

public boolean check(boolean expr,
                     MessageDescription mess,
                     java.lang.Object param1,
                     java.lang.Object param2)
              throws UnpositionedError
Verify an expression and if false add an error
Parameters:
expr - condition to verify
mess - the message to be displayed
param1 - the first parameter
param2 - the second parameter
Returns:
the value of expr
Throws:
UnpositionedError - this error will be positioned soon

getCompiler

public Compiler getCompiler()
Gets the compiler