at.dms.kjc
Class JIntLiteral

java.lang.Object
  extended by at.dms.util.Utils
      extended by at.dms.compiler.Phylum
          extended by at.dms.kjc.JPhylum
              extended by at.dms.kjc.JExpression
                  extended by at.dms.kjc.JLiteral
                      extended by at.dms.kjc.JIntLiteral
All Implemented Interfaces:
Constants, DeepCloneable, Finalizable, Serializable

public class JIntLiteral
extends JLiteral

JLS 3.10.1 Integer Literals. This class represents int literals.

See Also:
Serialized Form

Field Summary
 
Fields inherited from class at.dms.kjc.JExpression
EMPTY
 
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 JIntLiteral()
           
  JIntLiteral(int value)
           
  JIntLiteral(TokenReference where, int value)
          Constructs a literal expression from a constant value.
  JIntLiteral(TokenReference where, String image)
          Constructs a literal expression from a textual representation.
 
Method Summary
 Object accept(AttributeVisitor p)
          Accepts the specified attribute visitor
<S,T> S
accept(ExpressionVisitor<S,T> p, T o)
          Accepts the specified visitor
 void accept(KjcVisitor p)
          Accepts the specified visitor
 JExpression analyse(CExpressionContext context)
          Analyses the expression (semantically).
 String convertToString()
          For up-casting into a string type.
 JExpression convertType(CType dest, CExpressionContext context)
          convertType changes the type of this expression to an other
 Object deepClone()
          Returns a deep clone of this object.
protected  void deepCloneInto(JIntLiteral other)
          Clones all fields of this into
 boolean equals(Object o)
          Returns whether or
 void genCode(CodeSequence code, boolean discardValue)
          Generates JVM bytecode to evaluate this expression.
 JIntLiteral getOppositeLiteral()
          Returns a literal with the sign inverted.
 CType getType()
          Returns the type of this expression.
 int intValue()
          Returns the constant value of the expression.
 boolean isAssignableTo(CType dest)
          Can this expression be converted to the specified type by assignment conversion (JLS 5.2) ?
 boolean isDefault()
          Returns true iff the value of this literal is the default value for this type (JLS 4.5.5).
 String toString()
          Returns a string representation of this literal.
 
Methods inherited from class at.dms.kjc.JLiteral
deepCloneInto, getLiteral, isConstant, parseInteger, parseReal, setType
 
Methods inherited from class at.dms.kjc.JExpression
booleanValue, byteValue, charValue, convertType, deepCloneInto, doubleValue, fail, floatValue, genBranch, genEndStoreCode, genStartStoreCode, getIdent, isDynamic, isFinal, isInitialized, isLValue, isStatementExpression, longValue, setInitialized, shortValue, stringValue
 
Methods inherited from class at.dms.kjc.JPhylum
assertMutable, check, check, check, check, deepCloneInto, setLineNumber
 
Methods inherited from class at.dms.compiler.Phylum
deepCloneInto, getTokenReference, setTokenReference
 
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, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

JIntLiteral

protected JIntLiteral()

JIntLiteral

public JIntLiteral(TokenReference where,
                   String image)
            throws PositionedError
Constructs a literal expression from a textual representation.

Parameters:
where - the line of this node in the source code
image - the textual representation of this literal
Throws:
PositionedError

JIntLiteral

public JIntLiteral(TokenReference where,
                   int value)
Constructs a literal expression from a constant value.

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

JIntLiteral

public JIntLiteral(int value)
Method Detail

getOppositeLiteral

public JIntLiteral getOppositeLiteral()
                               throws PositionedError
Returns a literal with the sign inverted. This is needed to handle 2147483648 which cannot be stored in a variable of type int. JLS 3.10.1 : The largest decimal literal of type int is 2147483648 (2^31). All decimal literals from 0 to 2147483647 may appear anywhere an int literal may appear, but the literal 2147483648 may appear only as the operand of the unary negation operator -.

Throws:
PositionedError

getType

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

Specified by:
getType in class JExpression

intValue

public int intValue()
Returns the constant value of the expression.

Overrides:
intValue in class JExpression

isDefault

public boolean isDefault()
Returns true iff the value of this literal is the default value for this type (JLS 4.5.5).

Specified by:
isDefault in class JLiteral

toString

public String toString()
Returns a string representation of this literal.

Overrides:
toString in class Object

convertToString

public String convertToString()
Description copied from class: JLiteral
For up-casting into a string type.

Specified by:
convertToString in class JLiteral

analyse

public JExpression analyse(CExpressionContext context)
                    throws PositionedError
Analyses the expression (semantically).

Overrides:
analyse in class JLiteral
Parameters:
context - the analysis context
Returns:
an equivalent, analysed expression
Throws:
PositionedError - the analysis detected an error

isAssignableTo

public boolean isAssignableTo(CType dest)
Can this expression be converted to the specified type by assignment conversion (JLS 5.2) ?

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

convertType

public JExpression convertType(CType dest,
                               CExpressionContext context)
convertType changes the type of this expression to an other

Specified by:
convertType in class JLiteral
Parameters:
dest - the destination type

accept

public void accept(KjcVisitor p)
Accepts the specified visitor

Specified by:
accept in class JExpression
Parameters:
p - the visitor

accept

public Object accept(AttributeVisitor p)
Accepts the specified attribute visitor

Specified by:
accept in class JExpression
Parameters:
p - the visitor
Returns:
data to pass back up

accept

public <S,T> S accept(ExpressionVisitor<S,T> p,
                      T o)
Accepts the specified visitor

Specified by:
accept in class JExpression
Type Parameters:
S - output type
T - auxilliary input type
Parameters:
p - the visitor
o - object containing extra data to be passed to visitor
Returns:
object containing data generated by visitor

genCode

public void genCode(CodeSequence code,
                    boolean discardValue)
Generates JVM bytecode to evaluate this expression.

Specified by:
genCode in class JExpression
Parameters:
code - the bytecode sequence
discardValue - discard the result of the evaluation ?

equals

public boolean equals(Object o)
Returns whether or
o
this represents a literal with the same value as this.

Overrides:
equals in class Object

deepClone

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

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

deepCloneInto

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