at.dms.kjc
Class CType

java.lang.Object
  |
  +--at.dms.util.Utils
        |
        +--at.dms.kjc.CType
All Implemented Interfaces:
Constants, Constants
Direct Known Subclasses:
CBooleanType, CClassType, CNumericType, CVoidType

public abstract class CType
extends Utils
implements Constants

Root for type abstraction hierarchy.


Field Summary
protected static SignatureParser signatureParser
          VM type signature parser instance.
protected  int type
          Type identifier.
 
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
protected CType(int typeID)
          Constructs a type baseclass with the general type identifier typeID.
 
Method Summary
protected abstract  void appendSignature(FastStringBuffer buff)
          Transforms this type to a string.
 boolean checked()
           
abstract  void checkType(CContext context)
          check that type is valid.
 boolean equals(CType other)
          Default equals for type abstractions.
static java.lang.String genMethodSignature(CType returnType, CType[] parameters)
          Generate a method signature.
 CClass getCClass()
           
 int getLoadOpcode()
          Returns the opcode to load a local variable of this type.
 int getReturnOpcode()
          Returns the opcode to return a value of this type.
 java.lang.String getSignature()
          Transforms this type to a string
abstract  int getSize()
          Returns the size used in stack by value of this type.
 int getStoreOpcode()
          Returns the opcode to store a local variable of this type.
 int getTypeID()
          Returns the ID of this type.
 boolean implicitlyCastTo(CType dest)
          implicitlyCastTo.
 boolean isArrayType()
           
abstract  boolean isAssignableTo(CType dest)
          Can this type be converted to the specified type by assignment conversion (JLS 5.2) ?
abstract  boolean isCastableTo(CType dest)
          Can this type be converted to the specified type by casting conversion (JLS 5.5) ?
 boolean isCheckedException()
           
 boolean isClassType()
          Check if a type is a class type.
 boolean isCodedHasInt()
          ?
 boolean isFloatingPoint()
          Check if a type is an integer type.
 boolean isNumeric()
          Check if a type is a numeric type.
 boolean isOrdinal()
          Check if a type is an integer type.
 boolean isPrimitive()
          Check if a type is a class type.
 boolean isReference()
          Check if a type is a class type.
static CType[] parseMethodSignature(java.lang.String sig)
          Returns an array of types represented by the type signature.
static CType parseSignature(java.lang.String signature)
          Parse a java type signature.
abstract  java.lang.String toString()
          Transforms this type to a string.
 
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
 

Field Detail

signatureParser

protected static final SignatureParser signatureParser
VM type signature parser instance.

type

protected int type
Type identifier.
Constructor Detail

CType

protected CType(int typeID)
Constructs a type baseclass with the general type identifier typeID.
Method Detail

equals

public boolean equals(CType other)
Default equals for type abstractions.

toString

public abstract java.lang.String toString()
Transforms this type to a string.
Overrides:
toString in class java.lang.Object

getSignature

public java.lang.String getSignature()
Transforms this type to a string
Returns:
the class file form of thid type

appendSignature

protected abstract void appendSignature(FastStringBuffer buff)
Transforms this type to a string.

getSize

public abstract int getSize()
Returns the size used in stack by value of this type.

isNumeric

public boolean isNumeric()
Check if a type is a numeric type.
Returns:
is it a numeric type?

isCodedHasInt

public boolean isCodedHasInt()
?

isOrdinal

public boolean isOrdinal()
Check if a type is an integer type.
Returns:
is it a integer type?

isFloatingPoint

public boolean isFloatingPoint()
Check if a type is an integer type.
Returns:
is it a real number type?

isPrimitive

public boolean isPrimitive()
Check if a type is a class type.
Returns:
is it a subtype of ClassType?

isReference

public boolean isReference()
Check if a type is a class type.
Returns:
is it a subtype of ClassType?

isClassType

public boolean isClassType()
Check if a type is a class type.
Returns:
is it a subtype of ClassType?

isArrayType

public boolean isArrayType()
Returns:
is this type an array?

checked

public boolean checked()
Returns:
true if this type is valid.

getTypeID

public int getTypeID()
Returns the ID of this type.

checkType

public abstract void checkType(CContext context)
                        throws UnpositionedError
check that type is valid. necessary to resolve String into java/lang/String
Throws:
UnpositionedError - This error will be positioned soon.

isCastableTo

public abstract boolean isCastableTo(CType dest)
Can this type be converted to the specified type by casting conversion (JLS 5.5) ?
Parameters:
dest - The destination type.
Returns:
true iff the casting conversion is valid.

implicitlyCastTo

public boolean implicitlyCastTo(CType dest)
implicitlyCastTo.
Parameters:
dest - the expression type to cast to
Returns:
cast is valid ?

isAssignableTo

public abstract boolean isAssignableTo(CType dest)
Can this type be converted to the specified type by assignment conversion (JLS 5.2) ?
Parameters:
dest - The destination type.
Returns:
true iff the casting conversion is valid.

isCheckedException

public boolean isCheckedException()
Returns:
true if this type corrspond to a checked exception

getCClass

public CClass getCClass()
Returns:
the object class of this type

getLoadOpcode

public int getLoadOpcode()
Returns the opcode to load a local variable of this type.

getStoreOpcode

public int getStoreOpcode()
Returns the opcode to store a local variable of this type.

getReturnOpcode

public int getReturnOpcode()
Returns the opcode to return a value of this type.

parseSignature

public static CType parseSignature(java.lang.String signature)
Parse a java type signature. Attempts to parse the provided string as if it started with the Java VM-standard signature for a type.

parseMethodSignature

public static CType[] parseMethodSignature(java.lang.String sig)
Returns an array of types represented by the type signature. The return type is the last element of the array.

genMethodSignature

public static java.lang.String genMethodSignature(CType returnType,
                                                  CType[] parameters)
Generate a method signature.