at.dms.kjc.rstream
Class ConvertArrayInitializers

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.rstream.ConvertArrayInitializers
All Implemented Interfaces:
Constants, AttributeVisitor<Object>, SLIRAttributeVisitor<Object>

public class ConvertArrayInitializers
extends SLIRReplacingVisitor

This class converts array initializers to a bunch of assignment statements. For locals it removes the array intializer from declaration and replaces it with a new array expression of the correct size, placed at the beginning of the method (after other array decls). For fields it remembers the assignment blocks in a hashset for later placement.

Author:
Michael Gordon

Field Summary
 HashSet<JBlock> fields
          Hashset mapping String -> JBlock to perform initialization of array
 
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
ConvertArrayInitializers()
          Create a new object and visit the ir starting at node.
 
Method Summary
 void convertFilter(SIRFilter filter)
           
 Object visitArrayInitializer(JArrayInitializer self, JExpression[] elems)
          prints an array initializer expression
 Object visitFieldDeclaration(JFieldDeclaration self, int modifiers, CType type, String ident, JExpression expr)
          visit a field decl, remove and convert the array initializer
 Object visitMethodDeclaration(JMethodDeclaration self, int modifiers, CType returnType, String ident, JFormalParameter[] parameters, CClassType[] exceptions, JBlock body)
          prints a method declaration
 Object visitVariableDefinition(JVariableDefinition self, int modifiers, CType type, String ident, JExpression expr)
          Visit a local var def and remove and convert the array initializer.
 
Methods inherited from class at.dms.kjc.SLIRReplacingVisitor
visitCreatePortalExpression, visitDynamicToken, visitFileReader, visitFileWriter, visitFunctionPointer, visitInitStatement, visitInterfaceTable, visitLatency, visitLatencyMax, visitLatencyRange, visitLatencySet, visitMainFunction, visitMarker, visitMessageStatement, visitNode, visitPeekExpression, visitPopExpression, visitPortal, visitPrintStatement, 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, visitDoStatement, visitEmittedTextExpression, visitEqualityExpression, visitExpressionListStatement, visitExpressionStatement, visitFieldExpression, visitFormalParameters, visitForStatement, visitIfStatement, visitInstanceofExpression, visitLabeledStatement, visitLogicalComplementExpression, visitMethodCallExpression, visitNameExpression, visitNewArrayExpression, visitParenthesedExpression, visitPostfixExpression, visitPrefixExpression, visitQualifiedAnonymousCreation, visitQualifiedInstanceCreation, visitRelationalExpression, visitReturnStatement, visitShiftExpression, visitSwitchGroup, visitSwitchLabel, visitSwitchStatement, visitSynchronizedStatement, visitThisExpression, visitThrowStatement, visitUnaryMinusExpression, visitUnaryPlusExpression, visitUnaryPromoteExpression, visitVariableDeclarationStatement, visitWhileStatement
 
Methods inherited from class at.dms.kjc.EmptyAttributeVisitor
visitBooleanLiteral, visitBreakStatement, visitByteLiteral, visitCatchClause, visitCharLiteral, visitClassBody, visitClassDeclaration, visitClassExpression, visitClassImport, visitComment, visitComments, visitCompilationUnit, visitConstructorCall, visitConstructorDeclaration, visitContinueStatement, visitDoubleLiteral, visitEmptyStatement, visitFloatLiteral, visitInnerClassDeclaration, visitInterfaceDeclaration, visitIntLiteral, visitJavadoc, visitLocalVariableExpression, visitLongLiteral, 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, 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, visitFieldExpression, visitFloatLiteral, visitFormalParameters, visitForStatement, visitIfStatement, visitInnerClassDeclaration, visitInstanceofExpression, visitInterfaceDeclaration, visitIntLiteral, visitJavadoc, visitLabeledStatement, visitLocalVariableExpression, visitLogicalComplementExpression, visitLongLiteral, visitMethodCallExpression, 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
 

Field Detail

fields

public HashSet<JBlock> fields
Hashset mapping String -> JBlock to perform initialization of array

Constructor Detail

ConvertArrayInitializers

public ConvertArrayInitializers()
Create a new object and visit the ir starting at node. Convert array initializers to new array expressions and remembers a sequence of assignments expressions that will perform the initialization.

Method Detail

convertFilter

public void convertFilter(SIRFilter filter)

visitMethodDeclaration

public Object visitMethodDeclaration(JMethodDeclaration self,
                                     int modifiers,
                                     CType returnType,
                                     String ident,
                                     JFormalParameter[] parameters,
                                     CClassType[] exceptions,
                                     JBlock body)
Description copied from class: EmptyAttributeVisitor
prints a method declaration

Specified by:
visitMethodDeclaration in interface AttributeVisitor<Object>
Overrides:
visitMethodDeclaration in class EmptyAttributeVisitor

visitVariableDefinition

public Object visitVariableDefinition(JVariableDefinition self,
                                      int modifiers,
                                      CType type,
                                      String ident,
                                      JExpression expr)
Visit a local var def and remove and convert the array initializer.

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

visitFieldDeclaration

public Object visitFieldDeclaration(JFieldDeclaration self,
                                    int modifiers,
                                    CType type,
                                    String ident,
                                    JExpression expr)
visit a field decl, remove and convert the array initializer

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

visitArrayInitializer

public Object visitArrayInitializer(JArrayInitializer self,
                                    JExpression[] elems)
Description copied from class: EmptyAttributeVisitor
prints an array initializer expression

Specified by:
visitArrayInitializer in interface AttributeVisitor<Object>
Overrides:
visitArrayInitializer in class EmptyAttributeVisitor