mjc

org.multijava.mjc
Class JAddExpression

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.JBinaryExpression
                      extended byorg.multijava.mjc.JBinaryArithmeticExpression
                          extended byorg.multijava.mjc.JAddExpression
All Implemented Interfaces:
Cloneable, Constants, Constants, PhylumType

public class JAddExpression
extends JBinaryArithmeticExpression
implements Constants

This class represents the addition binary expression.


Field Summary
private  boolean isInSafeMathMode
           
 
Fields inherited from class org.multijava.mjc.JBinaryExpression
left, right, type
 
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
JAddExpression(TokenReference where, JExpression left, JExpression right)
          Construct a node in the parsing tree.
 
Method Summary
 void accept(MjcVisitor p)
          Accepts the specified visitor
private  void appendToStringBuffer(CodeSequence code, JExpression expr)
          Generates a sequence of bytecodes
 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, CExpressionContextType context)
          Computes the result of the operation at compile-time (JLS 15.27).
 long compute(long left, long right, CExpressionContextType context)
          Computes the result of the operation at compile-time (JLS 15.27).
static CType computeType(CType leftType, CType rightType)
          compute the type of this expression according to operands
 JExpression constantFolding(CExpressionContextType context)
          Converts two constant expressions into a single literal that is the result of applying this operation to the expressions.
 void genCode(CodeSequence code)
          Generates a sequence of bytecodes
static int getOpcode(CType type)
           
 int safe_compute(int left, int right)
           
 long safe_compute(long left, long right)
           
 String toString()
           
 JExpression typecheck(CExpressionContextType context)
          Typechecks the expression and mutates the context to record information gathered during typechecking.
 JExpression typecheckBinaryArith(CExpressionContextType context)
          Typechecks a binary arithmetic expression and handles simple optimizations like constant folding.
 JExpression verifyOperation(JExpression expr, CExpressionContextType context)
          Verify the operation.
 
Methods inherited from class org.multijava.mjc.JBinaryExpression
genBooleanResultCode, genBranch, genBranch, getType, left, promote, right, setLeft, setRight, setType
 
Methods inherited from class org.multijava.mjc.JExpression
buildUniverseDynChecks, clone, convertType, dumpArray, fail, genUniverseDynCheckCode, getApparentType, getBooleanLiteral, getFANonNulls, getFANulls, getLiteral, getNumberLiteral, getOrdinalLiteral, getRealLiteral, getStringLiteral, isAssignableTo, isBooleanLiteral, isConstant, isDeclaredNonNull, isLiteral, isMaybeInitializable, isNonNull, isOrdinalLiteral, 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

isInSafeMathMode

private boolean isInSafeMathMode
Constructor Detail

JAddExpression

public JAddExpression(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 - the left operand
right - the right operand
Method Detail

toString

public String toString()
Overrides:
toString in class Object

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 JBinaryArithmeticExpression
Parameters:
context - the context in which this expression appears
Returns:
a desugared Java expression (see JExpression.typecheck())
Throws:
PositionedError - if the check fails

typecheckBinaryArith

public JExpression typecheckBinaryArith(CExpressionContextType context)
                                 throws PositionedError
Typechecks a binary arithmetic expression and handles simple optimizations like constant folding.

Parameters:
context - the actual context of analysis
Returns:
a desugared Java expression (see JExpression.typecheck())
Throws:
PositionedError - if checks fail

verifyOperation

public JExpression verifyOperation(JExpression expr,
                                   CExpressionContextType context)
Verify the operation. Overridden in JML to issue warnings.


computeType

public static CType computeType(CType leftType,
                                CType rightType)
                         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(CExpressionContextType context)
                            throws UnpositionedError
Converts two constant expressions into a single literal that is the result of applying this operation to the expressions.

Returns:
a literal resulting from an operation over two literals
Throws:
UnpositionedError

safe_compute

public int safe_compute(int left,
                        int right)
                 throws UnpositionedError
Throws:
UnpositionedError

compute

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

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

safe_compute

public long safe_compute(long left,
                         long right)
                  throws UnpositionedError
Throws:
UnpositionedError

compute

public long compute(long left,
                    long right,
                    CExpressionContextType context)
Computes the result of the operation at compile-time (JLS 15.27).

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

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

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

accept

public void accept(MjcVisitor p)
Accepts the specified visitor

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

Parameters:
code - the code list

appendToStringBuffer

private void appendToStringBuffer(CodeSequence code,
                                  JExpression expr)
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.