at.dms.kjc
Class CClassContext

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

public class CClassContext
extends CContext

This class represents a class context during check.

See Also:
CCompilationUnitContext, CClassContext, CMethodContext, CContext

Field Summary
protected  CSourceClass self
          The class that provides this context.
 
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
(package private) CClassContext(CContext parent, CSourceClass clazz, JTypeDeclaration decl)
          Constructs a class context.
 
Method Summary
 void addFieldInfo(int index, int info)
          Sets field info about a specific field.
 void addInitializer()
          Add an initializer to this context.
 void close(JTypeDeclaration decl, CVariableInfo staticInfo, CVariableInfo instanceInfo, CVariableInfo[] constructorsInfo)
          Verify all final fields are initialized.
 CConstructorContext createConstructorContext(CMethod self)
          Makes new constructor-method context.
 CMethodContext createMethodContext(CMethod self)
          Makes new method context.
 CSourceClass getCClass()
          Returns the nearest class parent in this context, which is of type CSourceClass.
 CClassContext getClassContext()
          getClassContext
 int getFieldInfo(int index)
          Returns information about a specific field.
 CMethodContext getMethod()
          getMethod
 int getNextAnonymousIndex()
           
 int getNextSyntheticIndex()
           
 JTypeDeclaration getTypeDeclaration()
          getTypeDeclaration
 CVariableInfo getVariableInfo()
          Returns old field info and resets field info to a clean slate.
 int getVariableInfo(int index)
           
 boolean hasInitializer()
          Returns true if this class need initializers
 CClassType lookupClass(java.lang.String name)
          Search for a class with the provided name.
 CField lookupField(java.lang.String ident)
          lookupField
 JLocalVariable lookupLocalVariable(java.lang.String ident)
          lookupLocalVariable
 CMethod lookupMethod(CClass caller, java.lang.String ident, CType[] params)
          Searches for a matching method with the provided type parameters.
 CField lookupOuterField(java.lang.String ident)
          lookupField
 JExpression lookupOuterLocalVariable(TokenReference ref, java.lang.String ident)
          lookupOuterLocalVariable
 void markAllFieldsAsInitialized()
          Marks all fields as 'initialized'
 void setVariableInfo(CVariableInfo info)
          Sets assignment information for all fields at once.
 
Methods inherited from class at.dms.kjc.CContext
addSourceClass, check, check, check, fail, getBlockContext, getCompilationUnit, getCompiler, getMethodContext, getParentContext, 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
 

Field Detail

self

protected CSourceClass self
The class that provides this context.
Constructor Detail

CClassContext

CClassContext(CContext parent,
              CSourceClass clazz,
              JTypeDeclaration decl)
Constructs a class context.
Parameters:
parent - The parent context or null at top level.
clazz - The corresponding clazz.
Method Detail

close

public void close(JTypeDeclaration decl,
                  CVariableInfo staticInfo,
                  CVariableInfo instanceInfo,
                  CVariableInfo[] constructorsInfo)
           throws UnpositionedError
Verify all final fields are initialized.
Throws:
UnpositionedError - This error will be positioned soon.

createMethodContext

public CMethodContext createMethodContext(CMethod self)
Makes new method context.

createConstructorContext

public CConstructorContext createConstructorContext(CMethod self)
Makes new constructor-method context.

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()
See Also:
CSourceClass.getNextSyntheticIndex()

getNextAnonymousIndex

public int getNextAnonymousIndex()
See Also:
CSourceClass.getNextAnonymousIndex()

getVariableInfo

public int getVariableInfo(int index)
Parameters:
var - the definition of a variable
Returns:
a variable info from a variable definition in current context

getFieldInfo

public int getFieldInfo(int index)
Returns information about a specific field.
Overrides:
getFieldInfo in class CContext
Parameters:
index - The field position in the field array.
Returns:
All informations we have about this field.

addFieldInfo

public void addFieldInfo(int index,
                         int info)
Sets field info about a specific field.
Overrides:
addFieldInfo in class CContext
Parameters:
index - The field position in the field array.
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.

getVariableInfo

public CVariableInfo getVariableInfo()
Returns old field info and resets field info to a clean slate.

markAllFieldsAsInitialized

public void markAllFieldsAsInitialized()
Marks all fields as 'initialized'

setVariableInfo

public void setVariableInfo(CVariableInfo info)
Sets assignment information for all fields at once.

lookupClass

public CClassType lookupClass(java.lang.String name)
                       throws UnpositionedError
Search for a class with the provided name.
Overrides:
lookupClass in class CContext
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
Searches for a matching method with the provided type parameters.
Overrides:
lookupMethod in class CContext
Parameters:
caller - The class containing the statement that calls the method, used for access checks. May be null to suppress access checks.
ident - Method name.
params - Method parameters.
Returns:
The method or null if not found.
Throws:
UnpositionedError - This error will be positioned soon.

lookupOuterField

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

lookupField

public CField lookupField(java.lang.String ident)
                   throws UnpositionedError
lookupField
Overrides:
lookupField in class CContext
Parameters:
ident - the name of the field
Returns:
a variable from an ident in current context
Throws:
UnpositionedError - this error will be positioned soon

lookupOuterLocalVariable

public JExpression lookupOuterLocalVariable(TokenReference ref,
                                            java.lang.String ident)
lookupOuterLocalVariable
Parameters:
ident - the name of the outer variable
Returns:
a variable from an ident in upperclass context

lookupLocalVariable

public JLocalVariable lookupLocalVariable(java.lang.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 CSourceClass getCClass()
Returns the nearest class parent in this context, which is of type CSourceClass.
Returns:
the nearest class parent

getMethod

public CMethodContext getMethod()
getMethod
Returns:
the near parent of type CMethodContext

getTypeDeclaration

public JTypeDeclaration getTypeDeclaration()
getTypeDeclaration
Returns:
the near parent of type CMethodContext