at.dms.kjc
Class StatementQueueVisitor

java.lang.Object
  extended by at.dms.kjc.EmptyAttributeVisitor
      extended by at.dms.kjc.ReplacingVisitor
          extended by at.dms.kjc.SLIRReplacingVisitor
              extended by at.dms.kjc.StatementQueueVisitor
All Implemented Interfaces:
Constants, AttributeVisitor<Object>, SLIRAttributeVisitor<Object>

public class StatementQueueVisitor
extends SLIRReplacingVisitor

This visitor is for analyses that want to add one or more statements every time they see a given expression. Since an expression cannot be directly replaced by a statement, this class keeps track of pending statements and adds them as soon as possible at the statement level. For example, if you want to replace "pop()" by "buffer[index]; index = (index+1) % buffer_size" then you should extend this and treat the increment of "index" as the pending statement.


Field Summary
 
Fields inherited from class at.dms.kjc.EmptyAttributeVisitor
forwards
 
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
StatementQueueVisitor()
          // ---------------------------------------------------------------------- // INTERFACE // ----------------------------------------------------------------------
 
Method Summary
protected  void addPendingStatement(JStatement stmt)
          Subclasses should call this when visiting an expression to add a statement to the queue.
 Object visitDoStatement(JDoStatement self, JExpression cond, JStatement body)
          prints a do statement
 Object visitExpressionListStatement(JExpressionListStatement self, JExpression[] expr)
          prints an expression list statement
 Object visitExpressionStatement(JExpressionStatement self, JExpression expr)
          prints an expression statement
 Object visitForStatement(JForStatement self, JStatement init, JExpression cond, JStatement incr, JStatement body)
          visits a for statement
 Object visitIfStatement(JIfStatement self, JExpression cond, JStatement thenClause, JStatement elseClause)
          prints a if statement
 Object visitMessageStatement(SIRMessageStatement self, JExpression portal, String iname, String ident, JExpression[] args, SIRLatency latency)
          Visits a message statement.
 Object visitPrintStatement(SIRPrintStatement self, JExpression arg)
          Visits a print statement.
 Object visitReturnStatement(JReturnStatement self, JExpression expr)
          prints a return statement
 Object visitSwitchStatement(JSwitchStatement self, JExpression expr, JSwitchGroup[] body)
          prints a switch statement
 Object visitVariableDeclarationStatement(JVariableDeclarationStatement self, JVariableDefinition[] vars)
          prints a variable declaration statement
 Object visitWhileStatement(JWhileStatement self, JExpression cond, JStatement body)
          // ---------------------------------------------------------------------- // STATEMENT VISITORS // ----------------------------------------------------------------------
 
Methods inherited from class at.dms.kjc.SLIRReplacingVisitor
visitCreatePortalExpression, visitDynamicToken, visitFileReader, visitFileWriter, visitFunctionPointer, visitInitStatement, visitInterfaceTable, visitLatency, visitLatencyMax, visitLatencyRange, visitLatencySet, visitMainFunction, visitMarker, visitNode, visitPeekExpression, visitPopExpression, visitPortal, visitPushExpression, visitRangeExpression, visitRegReceiverStatement, visitRegSenderStatement, visitSetBodyOfFeedback, visitSetChild, visitSetDecode, visitSetDelay, visitSetEncode, visitSetJoiner, visitSetLoopOfFeedback, visitSetParallelStream, visitSetPeek, visitSetPop, visitSetPush, visitSetSplitter, visitSetStreamType, visitSetTape, visitSetWork, visitVectorLiteral
 
Methods inherited from class at.dms.kjc.ReplacingVisitor
visitArgs, visitArrayAccessExpression, visitArrayLengthExpression, visitAssignmentExpression, visitBinaryExpression, visitBitwiseComplementExpression, visitBitwiseExpression, visitBlockStatement, visitCastExpression, visitCompoundAssignmentExpression, visitCompoundStatement, visitConditionalExpression, visitEmittedTextExpression, visitEqualityExpression, visitFieldDeclaration, visitFieldExpression, visitFormalParameters, visitInstanceofExpression, visitLabeledStatement, visitLogicalComplementExpression, visitMethodCallExpression, visitNameExpression, visitNewArrayExpression, visitParenthesedExpression, visitPostfixExpression, visitPrefixExpression, visitQualifiedAnonymousCreation, visitQualifiedInstanceCreation, visitRelationalExpression, visitShiftExpression, visitSwitchGroup, visitSwitchLabel, visitSynchronizedStatement, visitThisExpression, visitThrowStatement, visitUnaryMinusExpression, visitUnaryPlusExpression, visitUnaryPromoteExpression, visitVariableDefinition
 
Methods inherited from class at.dms.kjc.EmptyAttributeVisitor
visitArrayInitializer, visitBooleanLiteral, visitBreakStatement, visitByteLiteral, visitCatchClause, visitCharLiteral, visitClassBody, visitClassDeclaration, visitClassExpression, visitClassImport, visitComment, visitComments, visitCompilationUnit, visitConstructorCall, visitConstructorDeclaration, visitContinueStatement, visitDoubleLiteral, visitEmptyStatement, visitFloatLiteral, visitInnerClassDeclaration, visitInterfaceDeclaration, visitIntLiteral, visitJavadoc, visitLocalVariableExpression, visitLongLiteral, visitMethodDeclaration, visitNullLiteral, visitPackageImport, visitPackageName, visitShortLiteral, visitStringLiteral, visitSuperExpression, visitTryCatchStatement, visitTryFinallyStatement, visitTypeDeclarationStatement, visitTypeNameExpression, visitUnqualifiedAnonymousCreation, visitUnqualifiedInstanceCreation
 
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.AttributeVisitor
visitArrayAccessExpression, visitArrayInitializer, visitArrayLengthExpression, visitAssignmentExpression, visitBinaryExpression, visitBitwiseComplementExpression, visitBitwiseExpression, visitBlockStatement, visitBooleanLiteral, visitBreakStatement, visitByteLiteral, visitCastExpression, visitCatchClause, visitCharLiteral, visitClassBody, visitClassDeclaration, visitClassExpression, visitClassImport, visitComment, visitComments, visitCompilationUnit, visitCompoundAssignmentExpression, visitCompoundStatement, visitConditionalExpression, visitConstructorCall, visitConstructorDeclaration, visitContinueStatement, visitDoubleLiteral, visitEmittedTextExpression, visitEmptyStatement, visitEqualityExpression, visitFieldDeclaration, visitFieldExpression, visitFloatLiteral, visitFormalParameters, visitInnerClassDeclaration, visitInstanceofExpression, visitInterfaceDeclaration, visitIntLiteral, visitJavadoc, visitLabeledStatement, visitLocalVariableExpression, visitLogicalComplementExpression, visitLongLiteral, visitMethodCallExpression, visitMethodDeclaration, visitNameExpression, visitNewArrayExpression, visitNullLiteral, visitPackageImport, visitPackageName, visitParenthesedExpression, visitPostfixExpression, visitPrefixExpression, visitQualifiedAnonymousCreation, visitQualifiedInstanceCreation, visitRelationalExpression, visitShiftExpression, visitShortLiteral, visitStringLiteral, visitSuperExpression, visitSwitchGroup, visitSwitchLabel, visitSynchronizedStatement, visitThisExpression, visitThrowStatement, visitTryCatchStatement, visitTryFinallyStatement, visitTypeDeclarationStatement, visitTypeNameExpression, visitUnaryMinusExpression, visitUnaryPlusExpression, visitUnaryPromoteExpression, visitUnqualifiedAnonymousCreation, visitUnqualifiedInstanceCreation, visitVariableDefinition
 

Constructor Detail

StatementQueueVisitor

public StatementQueueVisitor()
// ---------------------------------------------------------------------- // INTERFACE // ----------------------------------------------------------------------

Method Detail

addPendingStatement

protected void addPendingStatement(JStatement stmt)
Subclasses should call this when visiting an expression to add a statement to the queue.


visitWhileStatement

public Object visitWhileStatement(JWhileStatement self,
                                  JExpression cond,
                                  JStatement body)
// ---------------------------------------------------------------------- // STATEMENT VISITORS // ----------------------------------------------------------------------

Specified by:
visitWhileStatement in interface AttributeVisitor<Object>
Overrides:
visitWhileStatement in class ReplacingVisitor

visitVariableDeclarationStatement

public Object visitVariableDeclarationStatement(JVariableDeclarationStatement self,
                                                JVariableDefinition[] vars)
Description copied from class: ReplacingVisitor
prints a variable declaration statement

Specified by:
visitVariableDeclarationStatement in interface AttributeVisitor<Object>
Overrides:
visitVariableDeclarationStatement in class ReplacingVisitor

visitSwitchStatement

public Object visitSwitchStatement(JSwitchStatement self,
                                   JExpression expr,
                                   JSwitchGroup[] body)
Description copied from class: ReplacingVisitor
prints a switch statement

Specified by:
visitSwitchStatement in interface AttributeVisitor<Object>
Overrides:
visitSwitchStatement in class ReplacingVisitor

visitIfStatement

public Object visitIfStatement(JIfStatement self,
                               JExpression cond,
                               JStatement thenClause,
                               JStatement elseClause)
Description copied from class: ReplacingVisitor
prints a if statement

Specified by:
visitIfStatement in interface AttributeVisitor<Object>
Overrides:
visitIfStatement in class ReplacingVisitor

visitForStatement

public Object visitForStatement(JForStatement self,
                                JStatement init,
                                JExpression cond,
                                JStatement incr,
                                JStatement body)
Description copied from class: ReplacingVisitor
visits a for statement

Specified by:
visitForStatement in interface AttributeVisitor<Object>
Overrides:
visitForStatement in class ReplacingVisitor

visitExpressionStatement

public Object visitExpressionStatement(JExpressionStatement self,
                                       JExpression expr)
Description copied from class: ReplacingVisitor
prints an expression statement

Specified by:
visitExpressionStatement in interface AttributeVisitor<Object>
Overrides:
visitExpressionStatement in class ReplacingVisitor

visitExpressionListStatement

public Object visitExpressionListStatement(JExpressionListStatement self,
                                           JExpression[] expr)
Description copied from class: ReplacingVisitor
prints an expression list statement

Specified by:
visitExpressionListStatement in interface AttributeVisitor<Object>
Overrides:
visitExpressionListStatement in class ReplacingVisitor

visitDoStatement

public Object visitDoStatement(JDoStatement self,
                               JExpression cond,
                               JStatement body)
Description copied from class: ReplacingVisitor
prints a do statement

Specified by:
visitDoStatement in interface AttributeVisitor<Object>
Overrides:
visitDoStatement in class ReplacingVisitor

visitMessageStatement

public Object visitMessageStatement(SIRMessageStatement self,
                                    JExpression portal,
                                    String iname,
                                    String ident,
                                    JExpression[] args,
                                    SIRLatency latency)
Description copied from class: SLIRReplacingVisitor
Visits a message statement.

Specified by:
visitMessageStatement in interface SLIRAttributeVisitor<Object>
Overrides:
visitMessageStatement in class SLIRReplacingVisitor

visitPrintStatement

public Object visitPrintStatement(SIRPrintStatement self,
                                  JExpression arg)
Description copied from class: SLIRReplacingVisitor
Visits a print statement.

Specified by:
visitPrintStatement in interface SLIRAttributeVisitor<Object>
Overrides:
visitPrintStatement in class SLIRReplacingVisitor

visitReturnStatement

public Object visitReturnStatement(JReturnStatement self,
                                   JExpression expr)
Description copied from class: ReplacingVisitor
prints a return statement

Specified by:
visitReturnStatement in interface AttributeVisitor<Object>
Overrides:
visitReturnStatement in class ReplacingVisitor