at.dms.kjc
Class CClassContext

java.lang.Object
  extended by at.dms.util.Utils
      extended by at.dms.kjc.CContext
          extended by at.dms.kjc.CClassContext
All Implemented Interfaces:
Constants, DeepCloneable, Serializable
Direct Known Subclasses:
CInterfaceContext

public class CClassContext
extends CContext

This class represents a class context during check

See Also:
CCompilationUnitContext, CClassContext, CMethodContext, CContext, Serialized Form

Field Summary
protected  CSourceClass self
           
 
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 CClassContext()
           
 
Method Summary
 void addInitializer()
          Add an initializer to this context
 void close(JTypeDeclaration decl, CVariableInfo staticC, CVariableInfo instanceC, CVariableInfo[] constructorsC)
          Verify all final fields are initialized
 Object deepClone()
          Returns a deep clone of this object.
protected  void deepCloneInto(CClassContext other)
          Clones all fields of this into
 int getAnonymousIndex()
          getNextSyntheticIndex
 CClass getCClass()
          getCClass
 CClassContext getClassContext()
          getClassContext
 CVariableInfo getFieldInfo()
          Returns the field definition state.
 int getFieldInfo(int index)
           
 CVariableInfo getInitializerInfo()
          Gets the field state after execution of the instance initializer.
 CMethodContext getMethodContext()
          getMethod
 int getNextSyntheticIndex()
          getNextSyntheticIndex
 JTypeDeclaration getTypeDeclaration()
          getTypeDeclaration
 boolean hasInitializer()
          Returns true if this class need initializers
 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.
 CField lookupOuterField(CClass caller, String ident)
          Searches the class or interface to locate declarations of fields that are accessible.
 JExpression lookupOuterLocalVariable(TokenReference ref, String ident)
          lookupOuterLocalVariable
 void markAllFieldToInitialized(boolean isStatic)
          Marks all class or instance fields of this class initialized.
 void setFieldInfo(int index, int info)
           
 void setInitializerInfo(CVariableInfo initializerInfo)
          Sets the field state after execution of the instance initializer.
 void setVariableInfo(CVariableInfo info)
           
 
Methods inherited from class at.dms.kjc.CContext
addSourceClass, check, check, check, check, deepCloneInto, dumpContext, dumpContext, dumpIndent, fail, fail, getBlockContext, getCompilationUnitContext, getParentContext, isStaticContext, 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
 

Field Detail

self

protected CSourceClass self
Constructor Detail

CClassContext

protected CClassContext()
Method Detail

close

public void close(JTypeDeclaration decl,
                  CVariableInfo staticC,
                  CVariableInfo instanceC,
                  CVariableInfo[] constructorsC)
           throws UnpositionedError
Verify all final fields are initialized

Throws:
UnpositionedError - this error will be positioned soon

addInitializer

public void addInitializer()
Add an initializer to this context


hasInitializer

public boolean hasInitializer()
Returns true if this class need initializers


getNextSyntheticIndex

public int getNextSyntheticIndex()
getNextSyntheticIndex

Returns:
an unique int value incrementaly

getAnonymousIndex

public int getAnonymousIndex()
getNextSyntheticIndex

Returns:
an unique int value incrementaly

getFieldInfo

public CVariableInfo getFieldInfo()
Returns the field definition state.

Overrides:
getFieldInfo in class CContext

getFieldInfo

public int getFieldInfo(int index)
Overrides:
getFieldInfo in class CContext
Parameters:
index - the definition of a field
Returns:
all informations we have about this field

setFieldInfo

public void setFieldInfo(int index,
                         int info)
Overrides:
setFieldInfo in class CContext
Parameters:
index - The field 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

markAllFieldToInitialized

public void markAllFieldToInitialized(boolean isStatic)
Marks all class or instance fields of this class initialized.


setVariableInfo

public void setVariableInfo(CVariableInfo info)

setInitializerInfo

public void setInitializerInfo(CVariableInfo initializerInfo)
Sets the field state after execution of the instance initializer.


getInitializerInfo

public CVariableInfo getInitializerInfo()
Gets the field state after execution of the instance initializer.


lookupClass

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

Overrides:
lookupClass in class CContext
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.

Overrides:
lookupMethod in class CContext
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

lookupOuterField

public CField lookupOuterField(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

lookupField

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

Overrides:
lookupField in class CContext
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

lookupOuterLocalVariable

public JExpression lookupOuterLocalVariable(TokenReference ref,
                                            String ident)
lookupOuterLocalVariable

Parameters:
ident - the name of the outer variable
Returns:
a variable from an ident in upperclass context

lookupLocalVariable

public JLocalVariable lookupLocalVariable(String ident)
lookupLocalVariable

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

getClassContext

public CClassContext getClassContext()
getClassContext

Overrides:
getClassContext in class CContext
Returns:
the near parent of type CClassContext

getCClass

public CClass getCClass()
getCClass

Returns:
the near parent of type CClassContext

getMethodContext

public CMethodContext getMethodContext()
getMethod

Overrides:
getMethodContext in class CContext
Returns:
the near parent of type CMethodContext

getTypeDeclaration

public JTypeDeclaration getTypeDeclaration()
getTypeDeclaration

Returns:
the near parent of type CMethodContext

deepClone

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

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

deepCloneInto

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