at.dms.kjc
Class JAddExpression

java.lang.Object
  |
  +--at.dms.util.Utils
        |
        +--at.dms.compiler.Phylum
              |
              +--at.dms.kjc.JPhylum
                    |
                    +--at.dms.kjc.JExpression
                          |
                          +--at.dms.kjc.JBinaryExpression
                                |
                                +--at.dms.kjc.JBinaryArithmeticExpression
                                      |
                                      +--at.dms.kjc.JAddExpression
All Implemented Interfaces:
Constants, Constants

public class JAddExpression
extends JBinaryArithmeticExpression

A representation of the addition operator. See JLS2 15.18.2 and 15.18.1 This class represents both numeric and string additions.


Fields inherited from class at.dms.kjc.JBinaryExpression
left, right, type
 
Fields inherited from class at.dms.kjc.JExpression
EMPTY
 
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
JAddExpression(TokenReference where, JExpression left, JExpression right)
          Construct a node in the parsing tree
 
Method Summary
 void accept(KjcVisitor p)
          Accepts the specified visitor
 JExpression checkBinaryBody(CExpressionContext context)
          Check expression and evaluate and alter context.
 JExpression checkExpression(CExpressionContext context)
          Check expression and evaluate and alter context.
 double compute(double left, double right)
          Computes the result of the operation at compile-time (JLS 15.27).
 float compute(float left, float right)
          Computes the result of the operation at compile-time (JLS 15.27).
 int compute(int left, int right)
          Computes the result of the operation at compile-time (JLS 15.27).
 long compute(long left, long right)
          Computes the result of the operation at compile-time (JLS 15.27).
static CType computeType(CType left, CType right, MessageDescription badTypeMessage)
          compute the type of this expression according to operands
 JExpression constantFolding()
          Peforms the operation of the subclass implementation on constant operands.
 void genCode(CodeSequence code)
          Generates a sequence of bytecodes
static int getOpcode(CType type)
           
 
Methods inherited from class at.dms.kjc.JBinaryExpression
genBooleanResultCode, genBranch, genBranch, getLeft, getRight, getType, promote, setLeft, setRight, setType
 
Methods inherited from class at.dms.kjc.JExpression
checkExpression, convertType, fail, getBooleanLiteral, getLiteral, getNumberLiteral, getOrdinalLiteral, getRealLiteral, getStringLiteral, isAssignableTo, isConstant, isLiteral, isStatementExpression, isSubTypePossible, setConstant, unParenthesize
 
Methods inherited from class at.dms.kjc.JPhylum
check, check, check, check
 
Methods inherited from class at.dms.compiler.Phylum
getTokenReference, setTokenReference
 
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, toString, wait, wait, wait
 

Constructor Detail

JAddExpression

public JAddExpression(TokenReference where,
                      JExpression left,
                      JExpression right)
Construct a node in the parsing tree
Parameters:
where - the line of this node in the source code
left - the left operand
right - the right operand
Method Detail

checkExpression

public JExpression checkExpression(CExpressionContext context)
                            throws PositionedError
Check expression and evaluate and alter context.
Overrides:
checkExpression in class JBinaryArithmeticExpression
Parameters:
context - The context for evaluation of this expression.
Returns:
A pure java expression including promote node.
Throws:
PositionedError - If the check fails.

checkBinaryBody

public JExpression checkBinaryBody(CExpressionContext context)
                            throws PositionedError
Check expression and evaluate and alter context.
Overrides:
checkBinaryBody in class JBinaryArithmeticExpression
Parameters:
context - The context for evaluation of this expression.
Returns:
A pure java expression including promote node.
Throws:
PositionedError - Error catched as soon as possible.

computeType

public static CType computeType(CType left,
                                CType right,
                                MessageDescription badTypeMessage)
                         throws UnpositionedError
compute the type of this expression according to operands
Parameters:
leftType - the type of left operand
rightType - the type of right operand
Returns:
the type computed for this binary operation
Throws:
UnpositionedError - this error will be positioned soon

constantFolding

public JExpression constantFolding()
                            throws UnpositionedError
Peforms the operation of the subclass implementation on constant operands. This method must only be called when both operands are constant.
Overrides:
constantFolding in class JBinaryArithmeticExpression
Returns:
A literal, being the result of addition on the constant operands.

compute

public int compute(int left,
                   int right)
Computes the result of the operation at compile-time (JLS 15.27).
Overrides:
compute in class JBinaryArithmeticExpression
Parameters:
left - the first operand
right - the seconds operand
Returns:
the result of the operation

compute

public long compute(long left,
                    long right)
Computes the result of the operation at compile-time (JLS 15.27).
Overrides:
compute in class JBinaryArithmeticExpression
Parameters:
left - the first operand
right - the seconds operand
Returns:
the result of the operation

compute

public float compute(float left,
                     float right)
Computes the result of the operation at compile-time (JLS 15.27).
Overrides:
compute in class JBinaryArithmeticExpression
Parameters:
left - the first operand
right - the seconds operand
Returns:
the result of the operation

compute

public double compute(double left,
                      double right)
Computes the result of the operation at compile-time (JLS 15.27).
Overrides:
compute in class JBinaryArithmeticExpression
Parameters:
left - the first operand
right - the seconds operand
Returns:
the result of the operation

accept

public void accept(KjcVisitor p)
Accepts the specified visitor
Overrides:
accept in class JExpression
Parameters:
p - the visitor

getOpcode

public static int getOpcode(CType type)
Parameters:
type - the type of result
Returns:
the type of opcode for this operation

genCode

public void genCode(CodeSequence code)
Generates a sequence of bytecodes
Overrides:
genCode in class JExpression
Parameters:
code - the code list