at.dms.kjc
Class JBinaryArithmeticExpression

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
All Implemented Interfaces:
Constants, Constants
Direct Known Subclasses:
JAddExpression, JBitwiseExpression, JDivideExpression, JMinusExpression, JModuloExpression, JMultExpression, JShiftExpression

public abstract class JBinaryArithmeticExpression
extends JBinaryExpression

This class is an abstract root class for binary arithmetic expressions. (In the JLS second edition also refered to as "Multiplicative Operators", section 15.27)


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
protected JBinaryArithmeticExpression(TokenReference where, JExpression left, JExpression right)
          Construct a node in the parsing tree.
 
Method Summary
abstract  JExpression checkBinaryBody(CExpressionContext context)
          Check expression and evaluate and alter context
 JExpression checkExpression(CExpressionContext context)
          Check expression and evaluate and alter context.
abstract  double compute(double left, double right)
          Computes the result of the operation on two double constant values.
abstract  float compute(float left, float right)
          Computes the result of the operation on two float constant values.
abstract  int compute(int left, int right)
          Computes the result of the operation on two integer constant values.
abstract  long compute(long left, long right)
          Computes the result of the operation on two long constant values.
static CType computeType(CType leftType, CType rightType, MessageDescription badTypeMessage)
          Default rule for the type of the result of the binary arithmetic expression.
 JExpression constantFolding()
          Peforms the operation of the subclass implementation on constant operands.
 
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
accept, checkExpression, convertType, fail, genCode, 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

JBinaryArithmeticExpression

protected JBinaryArithmeticExpression(TokenReference where,
                                      JExpression left,
                                      JExpression right)
Construct a node in the parsing tree.
Parameters:
where - the location of this node in the source code.
left - left operand
righ - right operand
Method Detail

checkExpression

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

checkBinaryBody

public abstract JExpression checkBinaryBody(CExpressionContext context)
                                     throws PositionedError
Check expression and evaluate and alter context
Parameters:
context - the actual context of analyse
Returns:
a pure java expression including promote node
Throws:
PositionedError - Any error during this method, with information about position in the source file.

computeType

public static CType computeType(CType leftType,
                                CType rightType,
                                MessageDescription badTypeMessage)
                         throws UnpositionedError
Default rule for the type of the result of the binary arithmetic expression.
Parameters:
leftType - the type of left operand
rightType - the type of right operand
badTypeMessage - The message to be shown to the user when the types of the operands are bad.
Returns:
The possibly promoted type of the binary arithmetic expression.
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. These are the default rules for constant folding in binary arithmetic expressions. This involves Binary Numeric Promotion (JLS2 5.6.2) on constants.
Returns:
a literal resulting of an operation over two literals.
Throws:
UnpositionedError - This error will be positioned soon

compute

public abstract int compute(int left,
                            int right)
                     throws UnpositionedError
Computes the result of the operation on two integer constant values.
Parameters:
left - the left operand
right - the right operand
Returns:
the result of the operation

compute

public abstract long compute(long left,
                             long right)
                      throws UnpositionedError
Computes the result of the operation on two long constant values.
Parameters:
left - the left operand
right - the right operand
Returns:
the result of the operation

compute

public abstract float compute(float left,
                              float right)
                       throws UnpositionedError
Computes the result of the operation on two float constant values.
Parameters:
left - the left operand
right - the right operand
Returns:
the result of the operation

compute

public abstract double compute(double left,
                               double right)
                        throws UnpositionedError
Computes the result of the operation on two double constant values.
Parameters:
left - the left operand
right - the right operand
Returns:
the result of the operation