at.dms.kjc
Class CType

java.lang.Object
  extended by at.dms.util.Utils
      extended by at.dms.kjc.CType
All Implemented Interfaces:
Constants, DeepCloneable, Serializable
Direct Known Subclasses:
CBooleanType, CClassType, CEmittedTextType, CNumericType, CVectorType, CVectorTypeLow

public abstract class CType
extends Utils
implements Constants

Root for type hierarchy

See Also:
Serialized Form

Field Summary
protected static MethodSignatureParser instance
           
protected  int 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
protected CType()
           
protected CType(int type)
          Constructs a type signature
 
Method Summary
protected abstract  void appendSignature(SimpleStringBuffer buffer)
          Appends the VM signature of this type to the specified buffer.
 boolean checked()
           
abstract  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(CType other)
          Clones all fields of this into
 boolean equals(CType other)
          equals
static String genMethodSignature(CType returnType, CType[] parameters)
          Generates the signature of a method.
 int getArrayLoadOpcode()
          Returns the opcode used to load a value from an array.
 int getArrayStoreOpcode()
          Returns the opcode used to store a value into an array.
 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.
 String getSignature()
          Returns the VM signature of this type.
abstract  int getSize()
          Returns the stack size used by a value of this type.
abstract  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 getStoreOpcode()
          Returns the opcode to store a local variable of this type.
 int getTypeID()
          Returns the ID of this type
 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 isFloatingPoint()
          Check if a type is a floating point 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(String sig)
          Returns an array of types represented by the type signature For methods, the return type is the last element of the array
static CType parseSignature(String signature)
          Parse a java type signature Description : Attempts to parse the provided string as if it started with the Java VM-standard signature for a type.
abstract  String toString()
          Transforms this type to a string
 
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
 

Field Detail

type

protected int type

instance

protected static MethodSignatureParser instance
Constructor Detail

CType

protected CType()

CType

protected CType(int type)
Constructs a type signature

Method Detail

equals

public boolean equals(CType other)
equals


toString

public abstract String toString()
Transforms this type to a string

Overrides:
toString in class Object

getSignature

public String getSignature()
Returns the VM signature of this type.


appendSignature

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


getSizeInC

public abstract 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.


getSize

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


isNumeric

public boolean isNumeric()
Check if a type is a numeric type

Returns:
is it a numeric type ?

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 a floating point 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 final 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 conversion 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 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.


getArrayLoadOpcode

public int getArrayLoadOpcode()
Returns the opcode used to load a value from an array.


getArrayStoreOpcode

public int getArrayStoreOpcode()
Returns the opcode used to store a value into an array.


getReturnOpcode

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


parseSignature

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


parseMethodSignature

public static CType[] parseMethodSignature(String sig)
Returns an array of types represented by the type signature For methods, the return type is the last element of the array


genMethodSignature

public static String genMethodSignature(CType returnType,
                                        CType[] parameters)
Generates the signature of a method.

Parameters:
returnType - the return type of the method
parameters - the parameter types of the method

deepClone

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

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

deepCloneInto

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