at.dms.kjc.common
Class HasSideEffects

java.lang.Object
  extended by at.dms.kjc.KjcEmptyVisitor
      extended by at.dms.kjc.SLIREmptyVisitor
          extended by at.dms.kjc.common.HasSideEffects
All Implemented Interfaces:
Constants, KjcVisitor, SLIRVisitor

public class HasSideEffects
extends SLIREmptyVisitor

This class determines, given an expression, if the expression has any side effects.

Author:
Michael Gordon

Field Summary
 
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
 
Method Summary
static boolean hasSideEffects(JExpression entry)
          Return true if an expression has side effects, a method call, a prefix/postfix expression, an assignment expression
static boolean hasSideEffects(JStatement entry)
           
 void visitAssignmentExpression(JAssignmentExpression self, JExpression left, JExpression right)
          prints an assignment expression
 void visitCompoundAssignmentExpression(JCompoundAssignmentExpression self, int oper, JExpression left, JExpression right)
          prints a compound expression
 void visitCreatePortalExpression(SIRCreatePortal self)
           
 void visitInlineAssembly(InlineAssembly self, String[] asm, String[] input, String[] clobber)
          Visits InlineAssembly
 void visitMethodCallExpression(JMethodCallExpression self, JExpression prefix, String ident, JExpression[] args)
          prints a method call expression
 void visitPeekExpression(SIRPeekExpression self, CType tapeType, JExpression arg)
          Visits a peek expression.
 void visitPopExpression(SIRPopExpression self, CType tapeType)
          Visits a pop expression.
 void visitPostfixExpression(JPostfixExpression self, int oper, JExpression expr)
          prints a postfix expression
 void visitPrefixExpression(JPrefixExpression self, int oper, JExpression expr)
          prints a prefix expression
 void visitPushExpression(SIRPushExpression self, CType tapeType, JExpression arg)
          Visits a push expression.
 
Methods inherited from class at.dms.kjc.SLIREmptyVisitor
visitDynamicToken, visitFileReader, visitFileWriter, visitFunctionPointer, visitIdentity, visitInitStatement, visitInterfaceTable, visitLatency, visitLatencyMax, visitLatencyRange, visitLatencySet, visitMainFunction, visitMarker, visitMessageStatement, visitNode, visitPortal, visitPrintStatement, visitRangeExpression, visitRegisterReceiver, visitRegReceiverStatement, visitRegSenderStatement, visitSetBodyOfFeedback, visitSetChild, visitSetDecode, visitSetDelay, visitSetEncode, visitSetJoiner, visitSetLoopOfFeedback, visitSetParallelStream, visitSetPeek, visitSetPop, visitSetPush, visitSetSplitter, visitSetStreamType, visitSetTape, visitSetWork, visitVectorLiteral, visitWorkEntry, visitWorkExit
 
Methods inherited from class at.dms.kjc.KjcEmptyVisitor
visitArgs, visitArrayAccessExpression, visitArrayInitializer, visitArrayLengthExpression, visitBinaryExpression, visitBitwiseComplementExpression, visitBitwiseExpression, visitBlockStatement, visitBooleanLiteral, visitBreakStatement, visitByteLiteral, visitCastExpression, visitCatchClause, visitCharLiteral, visitClassBody, visitClassDeclaration, visitClassExpression, visitClassImport, visitComment, visitComments, visitCompilationUnit, visitCompoundStatement, visitCompoundStatement, visitConditionalExpression, visitConstructorCall, visitConstructorDeclaration, visitContinueStatement, visitDoStatement, visitDoubleLiteral, visitEmittedTextExpression, visitEmptyStatement, visitEqualityExpression, visitExpressionListStatement, visitExpressionStatement, visitFieldDeclaration, visitFieldExpression, visitFloatLiteral, visitFormalParameters, visitForStatement, visitIfStatement, visitInnerClassDeclaration, visitInstanceofExpression, visitInterfaceDeclaration, visitIntLiteral, visitJavadoc, visitLabeledStatement, visitLocalVariableExpression, visitLogicalComplementExpression, visitLongLiteral, visitMethodDeclaration, visitNameExpression, visitNewArrayExpression, visitNullLiteral, visitPackageImport, visitPackageName, visitParenthesedExpression, visitQualifiedAnonymousCreation, visitQualifiedInstanceCreation, visitRelationalExpression, visitReturnStatement, visitShiftExpression, visitShortLiteral, visitStringLiteral, visitSuperExpression, visitSwitchGroup, visitSwitchLabel, visitSwitchStatement, visitSynchronizedStatement, visitThisExpression, visitThrowStatement, visitTryCatchStatement, visitTryFinallyStatement, visitTypeDeclarationStatement, visitTypeNameExpression, visitUnaryMinusExpression, visitUnaryPlusExpression, visitUnaryPromoteExpression, visitUnqualifiedAnonymousCreation, visitUnqualifiedInstanceCreation, visitVariableDeclarationStatement, visitVariableDefinition, visitWhileStatement
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface at.dms.kjc.KjcVisitor
visitArrayAccessExpression, visitArrayInitializer, visitArrayLengthExpression, visitBinaryExpression, visitBitwiseComplementExpression, visitBitwiseExpression, visitBlockStatement, visitBooleanLiteral, visitBreakStatement, visitByteLiteral, visitCastExpression, visitCatchClause, visitCharLiteral, visitClassBody, visitClassDeclaration, visitClassExpression, visitClassImport, visitComment, visitComments, visitCompilationUnit, visitCompoundStatement, visitConditionalExpression, visitConstructorCall, visitConstructorDeclaration, visitContinueStatement, visitDoStatement, visitDoubleLiteral, visitEmittedTextExpression, visitEmptyStatement, visitEqualityExpression, visitExpressionListStatement, visitExpressionStatement, visitFieldDeclaration, visitFieldExpression, visitFloatLiteral, visitFormalParameters, visitForStatement, visitIfStatement, visitInnerClassDeclaration, visitInstanceofExpression, visitInterfaceDeclaration, visitIntLiteral, visitJavadoc, visitLabeledStatement, visitLocalVariableExpression, visitLogicalComplementExpression, visitLongLiteral, visitMethodDeclaration, visitNameExpression, visitNewArrayExpression, visitNullLiteral, visitPackageImport, visitPackageName, visitParenthesedExpression, visitQualifiedAnonymousCreation, visitQualifiedInstanceCreation, visitRelationalExpression, visitReturnStatement, visitShiftExpression, visitShortLiteral, visitStringLiteral, visitSuperExpression, visitSwitchGroup, visitSwitchLabel, visitSwitchStatement, visitSynchronizedStatement, visitThisExpression, visitThrowStatement, visitTryCatchStatement, visitTryFinallyStatement, visitTypeDeclarationStatement, visitTypeNameExpression, visitUnaryMinusExpression, visitUnaryPlusExpression, visitUnaryPromoteExpression, visitUnqualifiedAnonymousCreation, visitUnqualifiedInstanceCreation, visitVariableDeclarationStatement, visitVariableDefinition, visitWhileStatement
 

Method Detail

hasSideEffects

public static boolean hasSideEffects(JExpression entry)
Return true if an expression has side effects, a method call, a prefix/postfix expression, an assignment expression

Parameters:
entry - The expression we are interested in
Returns:
true if the expression has side effects, false otherwise.

hasSideEffects

public static boolean hasSideEffects(JStatement entry)

visitPrefixExpression

public void visitPrefixExpression(JPrefixExpression self,
                                  int oper,
                                  JExpression expr)
prints a prefix expression

Specified by:
visitPrefixExpression in interface KjcVisitor
Overrides:
visitPrefixExpression in class KjcEmptyVisitor

visitMethodCallExpression

public void visitMethodCallExpression(JMethodCallExpression self,
                                      JExpression prefix,
                                      String ident,
                                      JExpression[] args)
prints a method call expression

Specified by:
visitMethodCallExpression in interface KjcVisitor
Overrides:
visitMethodCallExpression in class KjcEmptyVisitor

visitAssignmentExpression

public void visitAssignmentExpression(JAssignmentExpression self,
                                      JExpression left,
                                      JExpression right)
prints an assignment expression

Specified by:
visitAssignmentExpression in interface KjcVisitor
Overrides:
visitAssignmentExpression in class KjcEmptyVisitor

visitCompoundAssignmentExpression

public void visitCompoundAssignmentExpression(JCompoundAssignmentExpression self,
                                              int oper,
                                              JExpression left,
                                              JExpression right)
prints a compound expression

Specified by:
visitCompoundAssignmentExpression in interface KjcVisitor
Overrides:
visitCompoundAssignmentExpression in class KjcEmptyVisitor

visitPostfixExpression

public void visitPostfixExpression(JPostfixExpression self,
                                   int oper,
                                   JExpression expr)
prints a postfix expression

Specified by:
visitPostfixExpression in interface KjcVisitor
Overrides:
visitPostfixExpression in class KjcEmptyVisitor

visitCreatePortalExpression

public void visitCreatePortalExpression(SIRCreatePortal self)
Specified by:
visitCreatePortalExpression in interface SLIRVisitor
Overrides:
visitCreatePortalExpression in class SLIREmptyVisitor

visitPeekExpression

public void visitPeekExpression(SIRPeekExpression self,
                                CType tapeType,
                                JExpression arg)
Visits a peek expression.

Specified by:
visitPeekExpression in interface SLIRVisitor
Overrides:
visitPeekExpression in class SLIREmptyVisitor

visitPopExpression

public void visitPopExpression(SIRPopExpression self,
                               CType tapeType)
Visits a pop expression.

Specified by:
visitPopExpression in interface SLIRVisitor
Overrides:
visitPopExpression in class SLIREmptyVisitor

visitPushExpression

public void visitPushExpression(SIRPushExpression self,
                                CType tapeType,
                                JExpression arg)
Visits a push expression.

Specified by:
visitPushExpression in interface SLIRVisitor
Overrides:
visitPushExpression in class SLIREmptyVisitor

visitInlineAssembly

public void visitInlineAssembly(InlineAssembly self,
                                String[] asm,
                                String[] input,
                                String[] clobber)
Visits InlineAssembly

Overrides:
visitInlineAssembly in class SLIREmptyVisitor