at.dms.kjc
Class CloningVisitor

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

public class CloningVisitor
extends SLIREmptyVisitor
implements StreamVisitor

This descends through a stream hierarchy and identifies local variables and stream structures that SHOULD be cloned (since their definition is within the hierarchy).


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
 
Constructor Summary
CloningVisitor()
           
 
Method Summary
 HashSet<DeepCloneable> getToBeCloned()
          Return the list of what should be cloned.
 void postVisitFeedbackLoop(SIRFeedbackLoop self, SIRFeedbackLoopIter iter)
           
 void postVisitPipeline(SIRPipeline self, SIRPipelineIter iter)
          POST-VISITS
 void postVisitSplitJoin(SIRSplitJoin self, SIRSplitJoinIter iter)
           
 void preVisitFeedbackLoop(SIRFeedbackLoop self, SIRFeedbackLoopIter iter)
           
 void preVisitPipeline(SIRPipeline self, SIRPipelineIter iter)
          PRE-VISITS
 void preVisitSplitJoin(SIRSplitJoin self, SIRSplitJoinIter iter)
           
 void visitBlockStatement(int offset, JBlock self, JavaStyleComment[] comments)
          Used by deepCopy(int offset,JBlock oldObj) above
 void visitFilter(SIRFilter self, SIRFilterIter iter)
          PLAIN-VISITS
 void visitFormalParameters(JFormalParameter self, boolean isFinal, CType type, String ident)
          visits a formal param.
 void visitInitStatement(SIRInitStatement self, SIRStream target)
          Visits an init statement (recurses into the target stream)
 void visitLocalVariableExpression(JLocalVariableExpression self, String ident)
          Right now the super doesn't visit the variable in a jlocal var, but make sure we don't, either.
 void visitPhasedFilter(SIRPhasedFilter self, SIRPhasedFilterIter iter)
           
 void visitVariableDefinition(JVariableDefinition self, int modifiers, CType type, String ident, JExpression expr)
          Visits a variable decl.
 
Methods inherited from class at.dms.kjc.SLIREmptyVisitor
visitCreatePortalExpression, visitDynamicToken, visitFileReader, visitFileWriter, visitFunctionPointer, visitIdentity, visitInlineAssembly, visitInterfaceTable, visitLatency, visitLatencyMax, visitLatencyRange, visitLatencySet, visitMainFunction, visitMarker, visitMessageStatement, visitNode, visitPeekExpression, visitPopExpression, visitPortal, visitPrintStatement, visitPushExpression, 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, visitAssignmentExpression, visitBinaryExpression, visitBitwiseComplementExpression, visitBitwiseExpression, visitBlockStatement, visitBooleanLiteral, visitBreakStatement, visitByteLiteral, visitCastExpression, visitCatchClause, visitCharLiteral, visitClassBody, visitClassDeclaration, visitClassExpression, visitClassImport, visitComment, visitComments, visitCompilationUnit, visitCompoundAssignmentExpression, visitCompoundStatement, visitCompoundStatement, visitConditionalExpression, visitConstructorCall, visitConstructorDeclaration, visitContinueStatement, visitDoStatement, visitDoubleLiteral, visitEmittedTextExpression, visitEmptyStatement, visitEqualityExpression, visitExpressionListStatement, visitExpressionStatement, visitFieldDeclaration, visitFieldExpression, visitFloatLiteral, visitForStatement, visitIfStatement, visitInnerClassDeclaration, visitInstanceofExpression, visitInterfaceDeclaration, visitIntLiteral, visitJavadoc, visitLabeledStatement, visitLogicalComplementExpression, visitLongLiteral, visitMethodCallExpression, visitMethodDeclaration, visitNameExpression, visitNewArrayExpression, visitNullLiteral, visitPackageImport, visitPackageName, visitParenthesedExpression, visitPostfixExpression, visitPrefixExpression, visitQualifiedAnonymousCreation, visitQualifiedInstanceCreation, visitRelationalExpression, visitReturnStatement, visitShiftExpression, visitShortLiteral, visitStringLiteral, visitSuperExpression, visitSwitchGroup, visitSwitchLabel, visitSwitchStatement, visitSynchronizedStatement, visitThisExpression, visitThrowStatement, visitTryCatchStatement, visitTryFinallyStatement, visitTypeDeclarationStatement, visitTypeNameExpression, visitUnaryMinusExpression, visitUnaryPlusExpression, visitUnaryPromoteExpression, visitUnqualifiedAnonymousCreation, visitUnqualifiedInstanceCreation, visitVariableDeclarationStatement, 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, visitAssignmentExpression, visitBinaryExpression, visitBitwiseComplementExpression, visitBitwiseExpression, visitBlockStatement, visitBooleanLiteral, visitBreakStatement, visitByteLiteral, visitCastExpression, visitCatchClause, visitCharLiteral, visitClassBody, visitClassDeclaration, visitClassExpression, visitClassImport, visitComment, visitComments, visitCompilationUnit, visitCompoundAssignmentExpression, visitCompoundStatement, visitConditionalExpression, visitConstructorCall, visitConstructorDeclaration, visitContinueStatement, visitDoStatement, visitDoubleLiteral, visitEmittedTextExpression, visitEmptyStatement, visitEqualityExpression, visitExpressionListStatement, visitExpressionStatement, visitFieldDeclaration, visitFieldExpression, visitFloatLiteral, visitForStatement, visitIfStatement, visitInnerClassDeclaration, visitInstanceofExpression, visitInterfaceDeclaration, visitIntLiteral, visitJavadoc, visitLabeledStatement, visitLogicalComplementExpression, visitLongLiteral, visitMethodCallExpression, visitMethodDeclaration, visitNameExpression, visitNewArrayExpression, visitNullLiteral, visitPackageImport, visitPackageName, visitParenthesedExpression, visitPostfixExpression, visitPrefixExpression, visitQualifiedAnonymousCreation, visitQualifiedInstanceCreation, visitRelationalExpression, visitReturnStatement, visitShiftExpression, visitShortLiteral, visitStringLiteral, visitSuperExpression, visitSwitchGroup, visitSwitchLabel, visitSwitchStatement, visitSynchronizedStatement, visitThisExpression, visitThrowStatement, visitTryCatchStatement, visitTryFinallyStatement, visitTypeDeclarationStatement, visitTypeNameExpression, visitUnaryMinusExpression, visitUnaryPlusExpression, visitUnaryPromoteExpression, visitUnqualifiedAnonymousCreation, visitUnqualifiedInstanceCreation, visitVariableDeclarationStatement, visitWhileStatement
 

Constructor Detail

CloningVisitor

public CloningVisitor()
Method Detail

visitBlockStatement

public void visitBlockStatement(int offset,
                                JBlock self,
                                JavaStyleComment[] comments)
Used by deepCopy(int offset,JBlock oldObj) above


getToBeCloned

public HashSet<DeepCloneable> getToBeCloned()
Return the list of what should be cloned.


visitLocalVariableExpression

public void visitLocalVariableExpression(JLocalVariableExpression self,
                                         String ident)
Right now the super doesn't visit the variable in a jlocal var, but make sure we don't, either.

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

visitVariableDefinition

public void visitVariableDefinition(JVariableDefinition self,
                                    int modifiers,
                                    CType type,
                                    String ident,
                                    JExpression expr)
Visits a variable decl.

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

visitFormalParameters

public void visitFormalParameters(JFormalParameter self,
                                  boolean isFinal,
                                  CType type,
                                  String ident)
visits a formal param.

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

visitInitStatement

public void visitInitStatement(SIRInitStatement self,
                               SIRStream target)
Visits an init statement (recurses into the target stream)

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

visitFilter

public void visitFilter(SIRFilter self,
                        SIRFilterIter iter)
Description copied from interface: StreamVisitor
PLAIN-VISITS

Specified by:
visitFilter in interface StreamVisitor

visitPhasedFilter

public void visitPhasedFilter(SIRPhasedFilter self,
                              SIRPhasedFilterIter iter)
Specified by:
visitPhasedFilter in interface StreamVisitor

preVisitPipeline

public void preVisitPipeline(SIRPipeline self,
                             SIRPipelineIter iter)
PRE-VISITS

Specified by:
preVisitPipeline in interface StreamVisitor

preVisitSplitJoin

public void preVisitSplitJoin(SIRSplitJoin self,
                              SIRSplitJoinIter iter)
Specified by:
preVisitSplitJoin in interface StreamVisitor

preVisitFeedbackLoop

public void preVisitFeedbackLoop(SIRFeedbackLoop self,
                                 SIRFeedbackLoopIter iter)
Specified by:
preVisitFeedbackLoop in interface StreamVisitor

postVisitPipeline

public void postVisitPipeline(SIRPipeline self,
                              SIRPipelineIter iter)
POST-VISITS

Specified by:
postVisitPipeline in interface StreamVisitor

postVisitSplitJoin

public void postVisitSplitJoin(SIRSplitJoin self,
                               SIRSplitJoinIter iter)
Specified by:
postVisitSplitJoin in interface StreamVisitor

postVisitFeedbackLoop

public void postVisitFeedbackLoop(SIRFeedbackLoop self,
                                  SIRFeedbackLoopIter iter)
Specified by:
postVisitFeedbackLoop in interface StreamVisitor