JML

org.multijava.mjc
Class CNumericType

java.lang.Object
  extended byorg.multijava.util.Utils
      extended byorg.multijava.mjc.CType
          extended byorg.multijava.mjc.CNumericType
All Implemented Interfaces:
Cloneable, Comparable, Constants, Constants, CTypeSignatureAppender
Direct Known Subclasses:
JmlNumericType

public class CNumericType
extends CType

This class represents java and kopi numericals types Such as byte, short, int, long, float, double

See Also:
CType

Nested Class Summary
 
Nested classes inherited from class org.multijava.mjc.CType
CType.MethodSignature, CType.MethodSignatureParser, CType.StringBuffers, CType.TupleCollection
 
Field Summary
 
Fields inherited from class org.multijava.mjc.CType
EMPTY, instance, isMethodTypeVariable, isTypeVariable, type
 
Fields inherited from class org.multijava.util.Utils
DBG_LEVEL_HIGH, DBG_LEVEL_LOW, DBG_LEVEL_NO
 
Fields inherited from interface org.multijava.mjc.Constants
ACC_MODIFIER_FLAGS_MASK, ACC_NON_NULL, ACC_NON_NULL_BY_DEFAULT, ACC_NULLABLE, ACC_NULLABLE_BY_DEFAULT, ACC_PURE, ACCESS_FLAG_ARRAY, ACCESS_FLAG_NAMES, AMID_JAVA_MATH, AMID_MAX, AMID_SAFE_MATH, CMP_VERSION, IMPLICITLY_NON_NULL, JAV_ASSERTION_ERROR, JAV_CLASS, JAV_CLASSLOADER, JAV_CLASSNOTFOUND_EXCEPTION, JAV_CLONE, JAV_CLONEABLE, JAV_CONSTRUCTOR, JAV_ERROR, JAV_EXCEPTION, JAV_INIT, JAV_LENGTH, JAV_NAME_SEPARATOR, JAV_NOCLASSDEFFOUND_ERROR, JAV_OBJECT, JAV_OUTER_THIS, JAV_RMJ_RUNTIME_EXCEPTION, JAV_RUNTIME, JAV_RUNTIME_EXCEPTION, JAV_SERIALIZABLE, JAV_STATIC_INIT, JAV_STRING, JAV_STRINGBUFFER, JAV_SUPER, JAV_THIS, JAV_THROWABLE, MJ_ANCHOR, NULLITY_MODS, OPE_BAND, OPE_BNOT, OPE_BOR, OPE_BSR, OPE_BXOR, OPE_EQ, OPE_GE, OPE_GT, OPE_LAND, OPE_LE, OPE_LNOT, OPE_LOR, 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_MAX, TID_SHORT, TID_VOID, UNIV_ARRAY_TMP, UNIV_TMP
 
Fields inherited from interface org.multijava.util.classfile.Constants
ACC_ABSTRACT, ACC_FINAL, ACC_INTERFACE, ACC_NATIVE, ACC_PRIVATE, ACC_PROTECTED, ACC_PUBLIC, ACC_STATIC, ACC_STRICT, ACC_SUPER, ACC_SYNCHRONIZED, ACC_SYNTHETIC, ACC_TRANSIENT, ACC_VOLATILE, ATT_ANCHOR, ATT_BRIDGE, ATT_CODE, ATT_CONSTANTVALUE, ATT_DEPRECATED, ATT_DISPATCHER, ATT_EXCEPTIONS, ATT_GENERIC, ATT_GENERIC_FUNCTIONS, ATT_INNERCLASSES, ATT_LINENUMBERTABLE, ATT_LOCALVARIABLETABLE, ATT_MM_BODY, ATT_REDIRECTOR, ATT_RMJ_GLUE, ATT_RMJ_SIGNATURE, ATT_RUNTIME_VISIBLE_ANNOTATIONS, ATT_RUNTIME_VISIBLE_PARAMETER_ANNOTATIONS, ATT_SIGNATURE, ATT_SOURCEFILE, ATT_SYNTHETIC, ATT_UNIVERSE_FIELD, ATT_UNIVERSE_METHOD, ATT_UNIVERSE_VERSION, 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_dup2, opc_dup2_x1, opc_dup2_x2, opc_dup_x1, opc_dup_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_ldc2_w, opc_ldc_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 CNumericType(int typeID)
          Constructor
 
Method Summary
 void appendSignature(FastStringBuffer buff)
          Transforms this type to a string
 CType binaryPromote(CType other)
          binaryPromote search the type corresponding to the promotion of the two types (this and other)
 CType checkType(CContextType context)
          Checks that this type is valid, throwing an exception if it is not.
 void genCastTo(CNumericType dest, CodeSequence code)
          Generates a sequence of bytecodes
 String getSignature()
          Transforms this type to a string
 int getSize()
          Returns the size used in stack by value of this type
 boolean implicitlyCastTo(CType dest)
          implicitlyCastTo
 boolean isAlwaysAssignableTo(CType dest)
          Is this type assignable to the given type by assignment type conversion [JLS2 5.2] [JLS2 5.1.2].
 boolean isCastableTo(CType dest)
          isCastableTo
 boolean isCodedAsInt()
          Check if this type is ...
 boolean isFloatingPoint()
          Check if this type is a floating point type.
 boolean isNumeric()
          Check if a type is a numeric type
 boolean isOrdinal()
          Check if this type is an integral type.
protected  boolean isValidNumericTypeID(int typeID)
           
 void resolveValueType(CExpressionContextType context)
          Compute the value of a specializer expression used to dispatch on a compile-time constant.
 String toString()
          Transforms this type to a string
 CType unaryPromote()
          unaryPromote search the type corresponding to the type after computation
static CType unifyNumeric(CType t1, CType t2)
          This isn't used and isn't right at any rate.
private static CType unifyNumericIn(CType t1, CType t2)
          unifyNumeric search the type corresponding to the unification of the two types
 boolean widening_primitive_conv_from(CType from)
          Returns true iff from type can be converted by widening primitive conversion to this type.
 
Methods inherited from class org.multijava.mjc.CType
appendGenericSignature, changesByErasure, checked, compareTo, equals, equals, equals, equals, genGenericMethodSignature, genGenericMethodSignature, genGenericMethodSignatureHelper, genMethodSignature, genMultimethodSignature, getAllArguments, getArguments, getCapture, getCClass, getErasure, getErasure, getGenericSignature, getIdent, getLoadOpcode, getReturnOpcode, getStoreOpcode, getTypeID, getValue, isAlwaysAssignableTo, isAlwaysAssignableTo, isArrayType, isAssignableTo, isBoolean, isCapture, isCheckedException, isClassType, isClassTypeVariable, isConcrete, isGenericType, isInterface, isLocalTo, isMethodTypeVariable, isNestedType, isPrimitive, isRawType, isReference, isReifiableType, isTypeVariable, isValueType, isVoid, isWildcard, needsUncheckedConversion, needsUncheckedConversion, parseGenericTypeSignature, parseGenericTypeSignature, parseMethodSignature, parseMethodSignature, parseSignature, parseSignature, plantDispatchTest, setMethodTypeVariable, setTypeVariable, specializerSymbol, toVerboseString, tupleToString, tupleToString
 
Methods inherited from class org.multijava.util.Utils
assertTrue, assertTrue, combineArrays, escapeString, escapeString, fail, fail, getFilePath, hasFlag, hasOtherFlags, parsePathParts, relativePathTo, splitQualifiedName, splitQualifiedName, stripJavaModifiers, stripNonJavaModifiers, stripPrivateModifier, unescapeString, vectorToArray, vectorToIntArray
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

CNumericType

protected CNumericType(int typeID)
Constructor

Parameters:
typeID - the ident (int value) of this type
Method Detail

isValidNumericTypeID

protected boolean isValidNumericTypeID(int typeID)

toString

public String toString()
Transforms this type to a string

Specified by:
toString in class CType

getSignature

public String getSignature()
Transforms this type to a string

Overrides:
getSignature in class CType

appendSignature

public void appendSignature(FastStringBuffer buff)
Transforms this type to a string


getSize

public 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

Overrides:
isNumeric in class CType
Returns:
is it a numeric type ?

isCodedAsInt

public boolean isCodedAsInt()
Check if this type is ... [TBC]

Overrides:
isCodedAsInt in class CType
Returns:
TBC ?

isOrdinal

public boolean isOrdinal()
Check if this type is an integral type.

Overrides:
isOrdinal in class CType
Returns:
is this a integral type ?

isFloatingPoint

public boolean isFloatingPoint()
Check if this type is a floating point type.

Overrides:
isFloatingPoint in class CType
Returns:
is this a floating point number type ?

checkType

public CType checkType(CContextType context)
                throws UnpositionedError
Checks that this type is valid, throwing an exception if it is not. For class types this check resolves type names into their fully qualified versions and sets the class parameter so that getCClass returns the appropriate singleton.

Parameters:
context - the context in which this type was declared, may be null
Throws:
UnpositionedError - this unpositioned error should be positioned by the calling node of the AST, typically by calling the addPosition method of UnpositionedError

resolveValueType

public void resolveValueType(CExpressionContextType context)
                      throws PositionedError
Compute the value of a specializer expression used to dispatch on a compile-time constant.

Parameters:
context - the context in which this class declaration appears
Throws:
PositionedError - if the check fails

widening_primitive_conv_from

public boolean widening_primitive_conv_from(CType from)
Returns true iff from type can be converted by widening primitive conversion to this type. [JLS2 5.1.2]


isAlwaysAssignableTo

public boolean isAlwaysAssignableTo(CType dest)
Is this type assignable to the given type by assignment type conversion [JLS2 5.2] [JLS2 5.1.2]. The only conversions checked here are the widening primitive conversions and identity conversion. Narrowing primitive conversions are treated as a special case in JExpression.isAssignableTo()

Parameters:
dest - the destination type
Returns:
true iff assignment is valid
See Also:
JExpression.isAssignableTo(CType)

isCastableTo

public boolean isCastableTo(CType dest)
isCastableTo

Parameters:
dest - the destination type
Returns:
cast is valid ?

implicitlyCastTo

public boolean implicitlyCastTo(CType dest)
implicitlyCastTo

Overrides:
implicitlyCastTo in class CType
Parameters:
dest - the expression type to cast to
Returns:
cast is valid ?

unifyNumeric

public static CType unifyNumeric(CType t1,
                                 CType t2)
This isn't used and isn't right at any rate. Search the type corresponding to the unification of the two types. !FIXME!

Parameters:
t1 - the first type
t2 - the second type
Returns:
the corresponding type or null

unifyNumericIn

private static CType unifyNumericIn(CType t1,
                                    CType t2)
unifyNumeric search the type corresponding to the unification of the two types

Parameters:
t1 - the first type
t2 - the second type
Returns:
the corresponding type or null

unaryPromote

public CType unaryPromote()
unaryPromote search the type corresponding to the type after computation

Returns:
the corresponding type after operation

binaryPromote

public CType binaryPromote(CType other)
binaryPromote search the type corresponding to the promotion of the two types (this and other)

Parameters:
other - the second type
Returns:
the corresponding type or null

genCastTo

public void genCastTo(CNumericType dest,
                      CodeSequence code)
Generates a sequence of bytecodes

Parameters:
dest - the destination type
code - the code list

JML

JML is Copyright (C) 1998-2002 by Iowa State University and is distributed under the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This release depends on code from the MultiJava project and is based in part on the Kopi project Copyright (C) 1990-99 DMS Decision Management Systems Ges.m.b.H.