mjc

org.multijava.mjc
Class JOrdinalLiteral

java.lang.Object
  extended byorg.multijava.util.Utils
      extended byorg.multijava.util.compiler.Phylum
          extended byorg.multijava.mjc.JPhylum
              extended byorg.multijava.mjc.JExpression
                  extended byorg.multijava.mjc.JLiteral
                      extended byorg.multijava.mjc.JNumberLiteral
                          extended byorg.multijava.mjc.JOrdinalLiteral
All Implemented Interfaces:
Cloneable, Constants, Constants, PhylumType
Direct Known Subclasses:
JCharLiteral

public class JOrdinalLiteral
extends JNumberLiteral
implements Constants

This class represents literals of primitive integral types (byte, short, int, long). Instances of this class are also used to hold the results of computations of constant expressions over integral types.


Field Summary
protected  String image
           
protected  CType type
           
protected  Number value
           
 
Fields inherited from class org.multijava.mjc.JExpression
EMPTY
 
Fields inherited from class org.multijava.util.compiler.Phylum
 
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
JOrdinalLiteral(TokenReference where, Number value, CNumericType type)
          Construct a node in the parsing tree
JOrdinalLiteral(TokenReference where, String image)
          Construct a node in the parsing tree
JOrdinalLiteral(TokenReference where, long value, CNumericType type)
          Construct a node in the parsing tree
 
Method Summary
 void accept(MjcVisitor p)
          Accepts the specified visitor
protected  void calculateType()
          Determines the smallest magnitude ordinal type (byte, short, int, or long) that can represent the value of this literal.
 JExpression convertType(CType dest, CExpressionContextType context)
          convertType changes the type of this expression to another
 void genCode(CodeSequence code)
          Generates a sequence of bytecodes
 CType getType()
          Returns the type of this expression.
 Object getValue()
          Returns a Number that represents the value of this literal.
 String image()
           
 boolean isAssignableTo(CType dest)
          Is this type assignable to the given type by assignment type conversion [JLS2 5.2].
 boolean isImageOnly()
           
 boolean isOrdinalLiteral()
          Does this expression represent an ordinal literal?
 void negate()
          This is needed to handle -2147483648 that is allowed against 2147483648 that is not allowed, so we need to know if there is an unary minus before us
 Number numberValue()
          Returns a Number that represents the value of this literal.
private  void setValue(Number newValue, CNumericType newType)
          Sets value to the smallest numeric type that can contain newValue and sets type to newType.
 JExpression typecheck(CExpressionContextType context)
          Typechecks the expression and mutates the context to record information gathered during typechecking.
 
Methods inherited from class org.multijava.mjc.JNumberLiteral
isDefault, toString
 
Methods inherited from class org.multijava.mjc.JLiteral
createLiteral, getLiteral, isConstant, isLiteral, isLValue
 
Methods inherited from class org.multijava.mjc.JExpression
buildUniverseDynChecks, clone, dumpArray, fail, genBranch, genUniverseDynCheckCode, getApparentType, getBooleanLiteral, getFANonNulls, getFANulls, getNumberLiteral, getOrdinalLiteral, getRealLiteral, getStringLiteral, isBooleanLiteral, isDeclaredNonNull, isMaybeInitializable, isNonNull, isRealLiteral, isStatementExpression, isStringLiteral, typecheck, unParenthesize
 
Methods inherited from class org.multijava.mjc.JPhylum
check, check, check, check, fail, fail, warn, warn, warn, warn
 
Methods inherited from class org.multijava.util.compiler.Phylum
getTokenReference, setTokenReference
 
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
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

image

protected String image

value

protected Number value

type

protected CType type
Constructor Detail

JOrdinalLiteral

public JOrdinalLiteral(TokenReference where,
                       String image)
Construct a node in the parsing tree

Parameters:
where - the line of this node in the source code
image - the string representation of this literal

JOrdinalLiteral

public JOrdinalLiteral(TokenReference where,
                       Number value,
                       CNumericType type)
Construct a node in the parsing tree

Parameters:
where - the line of this node in the source code
value - the value of this literal
type - the type of this literal

JOrdinalLiteral

public JOrdinalLiteral(TokenReference where,
                       long value,
                       CNumericType type)
Construct a node in the parsing tree

Parameters:
where - the line of this node in the source code
value - the value of this literal
type - the type of this literal
Method Detail

negate

public void negate()
This is needed to handle -2147483648 that is allowed against 2147483648 that is not allowed, so we need to know if there is an unary minus before us


isImageOnly

public boolean isImageOnly()

getType

public CType getType()
Returns the type of this expression.


numberValue

public Number numberValue()
Returns a Number that represents the value of this literal.


getValue

public Object getValue()
Returns a Number that represents the value of this literal. Do not call before typecheck.


setValue

private void setValue(Number newValue,
                      CNumericType newType)
Sets value to the smallest numeric type that can contain newValue and sets type to newType.


image

public String image()

isOrdinalLiteral

public boolean isOrdinalLiteral()
Description copied from class: JExpression
Does this expression represent an ordinal literal?

Overrides:
isOrdinalLiteral in class JExpression

typecheck

public JExpression typecheck(CExpressionContextType context)
                      throws PositionedError
Typechecks the expression and mutates the context to record information gathered during typechecking.

Overrides:
typecheck in class JLiteral
Parameters:
context - the context in which this expression appears
Returns:
a desugared Java expression (see JExpression.typecheck())
Throws:
PositionedError - if the check fails

convertType

public JExpression convertType(CType dest,
                               CExpressionContextType context)
                        throws PositionedError
convertType changes the type of this expression to another

Overrides:
convertType in class JExpression
Parameters:
dest - the destination type
context - the context in which this expression appears
Throws:
PositionedError

isAssignableTo

public boolean isAssignableTo(CType dest)
Is this type assignable to the given type by assignment type conversion [JLS2 5.2]. This considers both widening and narrowing conversions.

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

calculateType

protected void calculateType()
Determines the smallest magnitude ordinal type (byte, short, int, or long) that can represent the value of this literal. The value is computed, if it is null.


accept

public void accept(MjcVisitor p)
Accepts the specified visitor

Parameters:
p - the visitor

genCode

public void genCode(CodeSequence code)
Generates a sequence of bytecodes

Parameters:
code - the code list

mjc

mjc is Copyright (C) 2000-2004 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. mjc is based in part on the Kopi project Copyright (C) 1990-99 DMS Decision Management Systems Ges.m.b.H.