at.dms.kjc
Class JBinaryArithmeticExpression

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.JBinaryExpression
                      extended by at.dms.kjc.JBinaryArithmeticExpression
All Implemented Interfaces:
Constants, DeepCloneable, Finalizable, Serializable
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 expressions

See Also:
Serialized Form

Field Summary
 
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
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 JBinaryArithmeticExpression()
           
  JBinaryArithmeticExpression(TokenReference where, JExpression left, JExpression right)
          Construct a node in the parsing tree This method is directly called by the parser
 
Method Summary
abstract  JExpression analyse(CExpressionContext context)
          Analyses the expression (semantically).
 double compute(double left, double right)
          Computes the result of the operation at compile-time (JLS 15.28).
 float compute(float left, float right)
          Computes the result of the operation at compile-time (JLS 15.28).
 int compute(int left, int right)
          Computes the result of the operation at compile-time (JLS 15.28).
 long compute(long left, long right)
          Computes the result of the operation at compile-time (JLS 15.28).
static CType computeType(String operator, CType left, CType right)
          compute the type of this expression according to operands
 JExpression constantFolding()
          Computes the result of the operation at compile-time (JLS 15.28).
 Object deepClone()
          Returns a deep clone of this object.
protected  void deepCloneInto(JBinaryArithmeticExpression other)
          Clones all fields of this into
 
Methods inherited from class at.dms.kjc.JBinaryExpression
deepCloneInto, genBooleanResultCode, genBranch, genBranch, getLeft, getRight, getType, setLeft, setRight, setType
 
Methods inherited from class at.dms.kjc.JExpression
accept, accept, accept, booleanValue, byteValue, charValue, convertType, convertType, deepCloneInto, doubleValue, fail, floatValue, genCode, genEndStoreCode, genStartStoreCode, getIdent, getLiteral, intValue, isAssignableTo, isConstant, 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, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

JBinaryArithmeticExpression

protected JBinaryArithmeticExpression()

JBinaryArithmeticExpression

public JBinaryArithmeticExpression(TokenReference where,
                                   JExpression left,
                                   JExpression right)
Construct a node in the parsing tree This method is directly called by the parser

Parameters:
where - the line of this node in the source code
left - left operand
right - right operand
Method Detail

analyse

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

Specified by:
analyse in class JExpression
Parameters:
context - the analysis context
Returns:
an equivalent, analysed expression
Throws:
PositionedError - the analysis detected an error

computeType

public static CType computeType(String operator,
                                CType left,
                                CType right)
                         throws UnpositionedError
compute the type of this expression according to operands

Parameters:
operator - the binary arithmetic operator
left - the type of left operand
right - 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()
Computes the result of the operation at compile-time (JLS 15.28).

Overrides:
constantFolding in class JBinaryExpression
Returns:
the literal holding the result of the operation

compute

public int compute(int left,
                   int right)
Computes the result of the operation at compile-time (JLS 15.28).

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.28).

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.28).

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.28).

Parameters:
left - the first operand
right - the seconds operand
Returns:
the result of the operation

deepClone

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

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

deepCloneInto

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