at.dms.kjc
Class CContext

java.lang.Object
  extended by at.dms.util.Utils
      extended by at.dms.kjc.CContext
All Implemented Interfaces:
Constants, DeepCloneable, Serializable
Direct Known Subclasses:
CBodyContext, 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), 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, Serialized Form

Field Summary
protected  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 CContext()
           
protected CContext(CContext parent)
          Construct a block context, it supports local variable allocation throw statement and return statement
 
Method Summary
 void addSourceClass(CSourceClass clazz)
          Adds a class to generate.
 void check(boolean assertion, MessageDescription description)
          Verifies an assertion.
 void check(boolean assertion, MessageDescription description, Object parameter1)
          Verifies an assertion.
 void check(boolean assertion, MessageDescription description, Object[] parameters)
          Verifies an assertion.
 void check(boolean assertion, MessageDescription description, Object parameter1, Object parameter2)
          Verifies an assertion.
 Object deepClone()
          Returns a deep clone of this object.
protected  void deepCloneInto(CContext other)
          Clones all fields of this into
 void dumpContext(int level)
          Dumps this context to standard error stream.
 void dumpContext(String text)
          Dumps this context to standard error stream.
 void dumpIndent(int level)
           
 void fail(MessageDescription description, Object[] parameters)
          Throws a semantic error detected during analysis.
 void fail(MessageDescription description, Object parameter1, Object parameter2)
          Signals a semantic error detected during analysis.
 CBlockContext getBlockContext()
          Returns the nearest block context (Where yuo can define some local vars)
 CClassContext getClassContext()
          getClassContext
 CCompilationUnitContext getCompilationUnitContext()
           
 CVariableInfo getFieldInfo()
          Returns the field definition state.
 int getFieldInfo(int index)
           
 CMethodContext getMethodContext()
          getMethod
 CContext getParentContext()
          getParentContext
 boolean isStaticContext()
          JLS 8.1.2: A statement or expression occurs in a static context if and only if the innermost method, constructor, instance initializer, static initializer, field initializer, or explicit constructor statement enclosing the statement or expression is a static method, a static initializer, the variable initializer of a static variable, or an explicit constructor invocation statement
 CClassType lookupClass(CClass caller, String name)
          lookupClass search for a class with the provided type parameters
 CField lookupField(CClass caller, String ident)
          Searches the class or interface to locate declarations of fields that are accessible.
 JLocalVariable lookupLocalVariable(String ident)
          lookupLocalVariable
 CMethod lookupMethod(CClass caller, String ident, CType[] actuals)
          JLS 15.12.2 : Searches the class or interface to locate method declarations that are both applicable and accessible, that is, declarations that can be correctly invoked on the given arguments.
 void reportTrouble(PositionedError trouble)
          Reports a semantic error detected during analysis.
 void setFieldInfo(int index, int info)
           
 
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
 

Field Detail

parent

protected CContext parent
Constructor Detail

CContext

protected CContext()

CContext

protected CContext(CContext 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
Method Detail

lookupClass

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

Parameters:
caller - the class of the caller
name - method name
Returns:
the class if found, null otherwise
Throws:
UnpositionedError - this error will be positioned soon

lookupMethod

public CMethod lookupMethod(CClass caller,
                            String ident,
                            CType[] actuals)
                     throws UnpositionedError
JLS 15.12.2 : Searches the class or interface to locate method declarations that are both applicable and accessible, that is, declarations that can be correctly invoked on the given arguments. There may be more than one such method declaration, in which case the most specific one is chosen.

Parameters:
caller - the class of the caller
ident - method name
actuals - method parameters
Returns:
the method or null if not found
Throws:
UnpositionedError - this error will be positioned soon

lookupField

public CField lookupField(CClass caller,
                          String ident)
                   throws UnpositionedError
Searches the class or interface to locate declarations of fields that are accessible.

Parameters:
caller - the class of the caller
ident - the simple name of the field
Returns:
the field definition
Throws:
UnpositionedError - this error will be positioned soon

lookupLocalVariable

public JLocalVariable lookupLocalVariable(String ident)
lookupLocalVariable

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

isStaticContext

public boolean isStaticContext()
JLS 8.1.2: A statement or expression occurs in a static context if and only if the innermost method, constructor, instance initializer, static initializer, field initializer, or explicit constructor statement enclosing the statement or expression is a static method, a static initializer, the variable initializer of a static variable, or an explicit constructor invocation statement

Returns:
true iff the context is static

getFieldInfo

public CVariableInfo getFieldInfo()
Returns the field definition state.


getFieldInfo

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

setFieldInfo

public void setFieldInfo(int index,
                         int info)
Parameters:
index - the definition of a field
info -

getParentContext

public CContext getParentContext()
getParentContext

Returns:
the parent

getCompilationUnitContext

public CCompilationUnitContext getCompilationUnitContext()
Returns:
the compilation unit

getClassContext

public CClassContext getClassContext()
getClassContext

Returns:
the near parent of type CClassContext

getMethodContext

public CMethodContext getMethodContext()
getMethod

Returns:
the near parent of type CClassContext

getBlockContext

public CBlockContext getBlockContext()
Returns the nearest block context (Where yuo can define some local vars)


addSourceClass

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


reportTrouble

public void reportTrouble(PositionedError trouble)
Reports a semantic error detected during analysis.

Parameters:
trouble - the error to report

fail

public void fail(MessageDescription description,
                 Object[] parameters)
          throws UnpositionedError
Throws a semantic error detected during analysis.

Parameters:
description - the message description
parameters - the array of parameters
Throws:
UnpositionedError - this error will be positioned soon

fail

public void fail(MessageDescription description,
                 Object parameter1,
                 Object parameter2)
          throws UnpositionedError
Signals a semantic error detected during analysis.

Parameters:
description - the message description
parameter1 - the first parameter
parameter2 - the second parameter
Throws:
UnpositionedError - this error will be positioned soon

check

public void check(boolean assertion,
                  MessageDescription description,
                  Object[] parameters)
           throws UnpositionedError
Verifies an assertion.

Parameters:
assertion - the assertion to verify
description - the message description
parameters - the array of parameters
Throws:
UnpositionedError - this error will be positioned soon

check

public void check(boolean assertion,
                  MessageDescription description)
           throws UnpositionedError
Verifies an assertion.

Parameters:
assertion - the assertion to verify
description - the message description
Throws:
UnpositionedError - this error will be positioned soon

check

public void check(boolean assertion,
                  MessageDescription description,
                  Object parameter1)
           throws UnpositionedError
Verifies an assertion.

Parameters:
assertion - the assertion to verify
description - the message description
parameter1 - the first parameter
Throws:
UnpositionedError - this error will be positioned soon

check

public void check(boolean assertion,
                  MessageDescription description,
                  Object parameter1,
                  Object parameter2)
           throws UnpositionedError
Verifies an assertion.

Parameters:
assertion - the assertion to verify
description - the message description
parameter1 - the first parameter
parameter2 - the second parameter
Throws:
UnpositionedError - this error will be positioned soon

dumpContext

public void dumpContext(String text)
Dumps this context to standard error stream.


dumpContext

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


dumpIndent

public void dumpIndent(int level)

deepClone

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

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

deepCloneInto

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