at.dms.kjc
Class CArrayType

java.lang.Object
  extended by at.dms.util.Utils
      extended by at.dms.kjc.CType
          extended by at.dms.kjc.CClassType
              extended by at.dms.kjc.CArrayType
All Implemented Interfaces:
Constants, DeepCloneable, Serializable

public class CArrayType
extends CClassType

This class represents class type in the type structure

See Also:
Serialized Form

Field Summary
 
Fields inherited from class at.dms.kjc.CClassType
EMPTY
 
Fields inherited from class at.dms.kjc.CType
instance, type
 
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
CArrayType(CType baseType, int arrayBound)
          Constructs an array type
CArrayType(CType baseType, int arrayBound, JExpression[] dims)
          Constructs an array type
 
Method Summary
 void appendSignature(SimpleStringBuffer buffer)
          Appends the VM signature of this type to the specified buffer.
 boolean checked()
           
 void checkType(CContext context)
          check that type is valid necessary to resolve String into java/lang/String
 Object deepClone()
          Returns a deep clone of this object.
protected  void deepCloneInto(CArrayType other)
          Clones all fields of this into
 boolean equals(CType other)
          equals
 int getArrayBound()
           
 CType getBaseType()
           
 JExpression[] getDims()
          Get dimensions of array.
 CType getElementType()
          Returns the type of the elements of an array of this type.
 String getQualifiedName()
           
 int getSize()
          Returns the stack size used by a value of this type.
 int getSizeInC()
          Returns the stack size (conservative estimate of maximum number of bytes needed in C on 32-bit machine) used by a value of this type.
 int getTotalNumElements()
          Returns the total number of elements in this array.
 boolean isArrayType()
           
 boolean isAssignableTo(CType dest)
          Can this type be converted to the specified type by assignment conversion (JLS 5.2) ?
 boolean isCastableTo(CType dest)
          Can this type be converted to the specified type by casting conversion (JLS 5.5) ?
 boolean isReference()
          Checks if a type is a reference type
 void setDims(JExpression[] d)
          Set array dimensions.
 String toString()
          Transforms this type to a string
 
Methods inherited from class at.dms.kjc.CClassType
deepCloneInto, getCClass, getIdent, init, isChecked, isCheckedException, isClassType, lookup, setClass
 
Methods inherited from class at.dms.kjc.CType
deepCloneInto, genMethodSignature, getArrayLoadOpcode, getArrayStoreOpcode, getLoadOpcode, getReturnOpcode, getSignature, getStoreOpcode, getTypeID, isFloatingPoint, isNumeric, isOrdinal, isPrimitive, parseMethodSignature, parseSignature
 
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, wait, wait, wait
 

Constructor Detail

CArrayType

public CArrayType(CType baseType,
                  int arrayBound)
Constructs an array type

Parameters:
baseType - the base type of the array type
arrayBound - the dimension of the array type

CArrayType

public CArrayType(CType baseType,
                  int arrayBound,
                  JExpression[] dims)
Constructs an array type

Parameters:
baseType - the base type of the array type
arrayBound - the dimension of the array type
dims - expressions for array bounds in each dimension
Method Detail

toString

public String toString()
Transforms this type to a string

Overrides:
toString in class CClassType
Returns:
the ksm form of this type

getQualifiedName

public String getQualifiedName()
Overrides:
getQualifiedName in class CClassType

appendSignature

public void appendSignature(SimpleStringBuffer buffer)
Appends the VM signature of this type to the specified buffer.

Overrides:
appendSignature in class CClassType

getSize

public int getSize()
Description copied from class: CClassType
Returns the stack size used by a value of this type.

Overrides:
getSize in class CClassType
Returns:
the size used in stack by value of this type

getTotalNumElements

public int getTotalNumElements()
Returns the total number of elements in this array. For example, an int[2][3] array has 6 total elements.


getSizeInC

public int getSizeInC()
Returns the stack size (conservative estimate of maximum number of bytes needed in C on 32-bit machine) used by a value of this type.

Overrides:
getSizeInC in class CClassType

isReference

public boolean isReference()
Checks if a type is a reference type

Overrides:
isReference in class CClassType
Returns:
is it a type that accept null value ?

isArrayType

public boolean isArrayType()
Overrides:
isArrayType in class CType
Returns:
is this type an array ?

getBaseType

public CType getBaseType()
Returns:
the base class of this type

getElementType

public CType getElementType()
Returns the type of the elements of an array of this type. Warning: treats multi-dimensional arrays in java style: as arrays of arrays. If trying to get a type for a C Code generator, you probably want getBaseType().


getArrayBound

public int getArrayBound()
Returns:
the number of array bracket of this type

checked

public boolean checked()
Overrides:
checked in class CType
Returns:
true if this type is valid

equals

public boolean equals(CType other)
equals

Overrides:
equals in class CClassType

checkType

public void checkType(CContext context)
               throws UnpositionedError
check that type is valid necessary to resolve String into java/lang/String

Overrides:
checkType in class CClassType
Parameters:
context - the context (may be be null)
Throws:
UnpositionedError - this error will be positioned soon

isAssignableTo

public boolean isAssignableTo(CType dest)
Can this type be converted to the specified type by assignment conversion (JLS 5.2) ?

Overrides:
isAssignableTo in class CClassType
Parameters:
dest - the destination type
Returns:
true iff the conversion is valid

isCastableTo

public boolean isCastableTo(CType dest)
Can this type be converted to the specified type by casting conversion (JLS 5.5) ?

Overrides:
isCastableTo in class CClassType
Parameters:
dest - the destination type
Returns:
true iff the conversion is valid

getDims

public JExpression[] getDims()
Get dimensions of array.

Returns:
JExpression[] -- by reference for updating visitors. Each expression should have integer type and evaluate (eventually) to the size of the n'th dimension of this array. Be very careful not to assign a different length JExpression[] to the returned value!

setDims

public void setDims(JExpression[] d)
Set array dimensions. Do not attempt to set to null. Do not attempt to alter number of dimensions.

Parameters:
d - array of JExpressions indicating dimentsions of array.

deepClone

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

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

deepCloneInto

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