at.dms.kjc
Class CArrayType

java.lang.Object
  |
  +--at.dms.util.Utils
        |
        +--at.dms.kjc.CType
              |
              +--at.dms.kjc.CClassType
                    |
                    +--at.dms.kjc.CArrayType
All Implemented Interfaces:
Constants, Constants

public class CArrayType
extends CClassType

This class represents the type of an array in the type structure.


Fields inherited from class at.dms.kjc.CClassType
EMPTY
 
Fields inherited from class at.dms.kjc.CType
signatureParser, type
 
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
CArrayType(CType baseType, int arrayBound)
          Constructs an array type.
 
Method Summary
 void appendSignature(FastStringBuffer buffer)
          Appends the classfile signature of this type to the buffer parameter.
 boolean checked()
          Returns true if this type is checked and valid.
 void checkType(CContext context)
          Check that type is valid.
 boolean equals(CType other)
          Returns true if this type is equal to another CType.
 int getArrayBound()
          Returns the number of dimensions of this array type.
 CType getBaseType()
          Returns the base class of this type.
 CClass getCClass()
          Returns the class object associated with this type If this type was never checked (read from class files) check it!
 CType getIndexedType()
          Returns the type that has one dimension less than this array type.
 java.lang.String getQualifiedName()
          Returns the signature.
 int getSize()
          Returns the size used in stack by value of this type.
 boolean implicitlyCastTo(CType dest)
          implicitlyCastTo
 boolean isArrayType()
          Returns true, because this is the class for array types.
 boolean isAssignableTo(CType dest)
          isAssignableTo
 boolean isCastableTo(CType dest)
          Can this type be converted to the specified type by casting conversion (JLS 5.5) ?
 boolean isReference()
          Returns true because an array always has a reference type.
 java.lang.String toString()
          Transforms this type to a string
 
Methods inherited from class at.dms.kjc.CClassType
getIdent, isChecked, isCheckedException, isClassType, lookup, lookup, setClass, setClassFromName
 
Methods inherited from class at.dms.kjc.CType
genMethodSignature, getLoadOpcode, getReturnOpcode, getSignature, getStoreOpcode, getTypeID, isCodedHasInt, isFloatingPoint, isNumeric, isOrdinal, isPrimitive, parseMethodSignature, parseSignature
 
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, wait, wait, wait
 

Constructor Detail

CArrayType

public CArrayType(CType baseType,
                  int arrayBound)
Constructs an array type.
Parameters:
baseType - The base type of the array.
arrayBound - The number of dimensions of the array.
Method Detail

toString

public java.lang.String toString()
Transforms this type to a string
Overrides:
toString in class CClassType
Returns:
the ksm form of this type

getQualifiedName

public java.lang.String getQualifiedName()
Returns the signature.
Overrides:
getQualifiedName in class CClassType

appendSignature

public void appendSignature(FastStringBuffer buffer)
Appends the classfile signature of this type to the buffer parameter.
Overrides:
appendSignature in class CClassType

getSize

public int getSize()
Returns the size used in stack by value of this type.
Overrides:
getSize in class CClassType
Returns:
The size used in stack by value of this type.

isReference

public boolean isReference()
Returns true because an array always has a reference type.
Overrides:
isReference in class CClassType
Returns:
true because an array always has a reference type.

isArrayType

public boolean isArrayType()
Returns true, because this is the class for array types.
Overrides:
isArrayType in class CType
Returns:
true, because this is the class for array types.

getBaseType

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

getIndexedType

public CType getIndexedType()
Returns the type that has one dimension less than this array type.
Returns:
The type that has one dimension less than this array type.

getArrayBound

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

checked

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

equals

public boolean equals(CType other)
Returns true if this type is equal to another CType. XXX: it is bad style and a cause of many errors to overload the equals method with another type than "Object" as its single argument. TODO: rename method in all CType classes to equalsCType and make an equals(Object) that calls to equalsCType if the argument is of that type. Java does _not_ have dynamic dispatching on argument types, never forget!
Overrides:
equals in class CClassType

checkType

public void checkType(CContext context)
               throws UnpositionedError
Check that type is valid.
Overrides:
checkType in class CClassType
Throws:
UnpositionedError - This error will be positioned soon.

getCClass

public CClass getCClass()
Returns the class object associated with this type If this type was never checked (read from class files) check it!
Overrides:
getCClass in class CClassType
Returns:
the class object associated with this type

isAssignableTo

public boolean isAssignableTo(CType dest)
isAssignableTo
Overrides:
isAssignableTo in class CClassType
Parameters:
dest - The destination type.
Returns:
Whether assignment is possible.

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 casting conversion is valid

implicitlyCastTo

public boolean implicitlyCastTo(CType dest)
implicitlyCastTo
Overrides:
implicitlyCastTo in class CClassType
Parameters:
dest - the expression type to cast to
Returns:
cast is valid ?