at.dms.kjc.common
Class ToC

java.lang.Object
  extended by at.dms.kjc.KjcEmptyVisitor
      extended by at.dms.kjc.SLIREmptyVisitor
          extended by at.dms.kjc.common.ToCCommon
              extended by at.dms.kjc.common.ToC
All Implemented Interfaces:
Constants, CodeGenerator, KjcVisitor, SLIRVisitor
Direct Known Subclasses:
EmitCode.CodeGen, FlatIRToC, FlatIRToC, FlatIRToRS, InsertCounters, TraceIRtoC

public class ToC
extends ToCCommon
implements SLIRVisitor, CodeGenerator

This class converts the Stream IR (which references the Kopi Java IR) to C code and dumps it to a file, str.c.

Author:
Michael Gordon

Field Summary
protected  boolean isInit
          true if we are currently visiting the init function
protected  JMethodDeclaration method
          the current function we are visiting
 
Fields inherited from class at.dms.kjc.common.ToCCommon
alternatePrintsForTiming, hasBoolType, lastLeft, p, printPostfixMap, printPrefixMap
 
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
ToC()
           
ToC(CodegenPrintWriter p)
           
 
Method Summary
 void clear()
          clear the internal String that represents the code generated so far
protected  void declareInitializedArray(CType type, String ident, JExpression expr)
          Prints initialization for an array with static initializer, e.g., "int A[2] = {1,2};" To promote code reuse with other backends, inputs a visitor to do the recursive call.
 boolean isDeclOnly()
           
 JExpression passParentheses(JExpression exp)
           
 void setDeclOnly(boolean declOnly)
           
 void visitArgs(JExpression[] args, int base)
          prints an array length expression
 void visitArrayAccessExpression(JArrayAccessExpression self, JExpression prefix, JExpression accessor)
          prints an array access expression
 void visitArrayInitializer(JArrayInitializer self, JExpression[] elems)
          prints an array initializer expression
 void visitArrayLengthExpression(JArrayLengthExpression self, JExpression prefix)
          prints an array length expression
 void visitBinaryExpression(JBinaryExpression self, String oper, JExpression left, JExpression right)
          prints an binary expression
 void visitBitwiseExpression(JBitwiseExpression self, int oper, JExpression left, JExpression right)
          prints a bitwise expression
 void visitBooleanLiteral(boolean value)
          prints a boolean literal
 void visitByteLiteral(byte value)
          prints a byte literal
 void visitCharLiteral(char value)
          prints a character literal
 void visitConstructorCall(JConstructorCall self, boolean functorIsThis, JExpression[] params)
          prints an array length expression
 void visitCreatePortalExpression(SIRCreatePortal self)
           
 void visitDoubleLiteral(double value)
          prints a double literal
 void visitFieldDeclaration(JFieldDeclaration self, int modifiers, CType type, String ident, JExpression expr)
          prints a field declaration
 void visitFieldExpression(JFieldAccessExpression self, JExpression left, String ident)
          prints a field expression
 void visitFloatLiteral(float value)
          prints a float literal
 void visitFormalParameters(JFormalParameter self, boolean isFinal, CType type, String ident)
          prints an array length expression
 void visitIfStatement(JIfStatement self, JExpression cond, JStatement thenClause, JStatement elseClause)
          prints a if statement
 void visitInitStatement(SIRInitStatement self, SIRStream stream)
          Visits an init statement.
 void visitInterfaceTable(SIRInterfaceTable self)
          Visits an interface table.
 void visitIntLiteral(int value)
          prints a int literal
 void visitLatency(SIRLatency self)
          Visits a latency.
 void visitLatencyMax(SIRLatencyMax self)
          Visits a max latency.
 void visitLatencyRange(SIRLatencyRange self)
          Visits a latency range.
 void visitLatencySet(SIRLatencySet self)
          Visits a latency set.
 void visitLongLiteral(long value)
          prints a long literal
 void visitMessageStatement(SIRMessageStatement self, JExpression portal, String iname, String ident, JExpression[] params, SIRLatency latency)
          Visits a message statement.
 void visitNameExpression(JNameExpression self, JExpression prefix, String ident)
          prints a name expression There should be no surviving JNameExpression's from the front end.
 void visitNullLiteral()
          prints a null literal
 void visitRelationalExpression(JRelationalExpression self, int oper, JExpression left, JExpression right)
          prints a relational expression
 void visitShortLiteral(short value)
          prints a short literal
 void visitStringLiteral(String value)
          prints a string literal
 void visitSuperExpression(JSuperExpression self)
          prints a super expression
 void visitSwitchGroup(JSwitchGroup self, JSwitchLabel[] labels, JStatement[] stmts)
          prints an array length expression
 void visitSwitchLabel(JSwitchLabel self, JExpression expr)
          prints an array length expression
 void visitThisExpression(JThisExpression self, JExpression prefix)
          prints a this expression
 
Methods inherited from class at.dms.kjc.common.ToCCommon
getPrinter, makeArrayStrings, makeString, printDecl, printExp, printLParen, printRParen, printType, splitForPrint, visitBitwiseComplementExpression, visitBlockStatement, visitBreakStatement, visitCastExpression, visitClassExpression, visitCompoundAssignmentExpression, visitCompoundStatement, visitCompoundStatement, visitConditionalExpression, visitContinueStatement, visitDoStatement, visitEmittedTextExpression, visitEmptyStatement, visitEqualityExpression, visitExpressionListStatement, visitExpressionStatement, visitForStatement, visitLabeledStatement, visitLocalVariableExpression, visitLogicalComplementExpression, visitMarker, visitParenthesedExpression, visitPostfixExpression, visitPrefixExpression, visitPrintStatement, visitReturnStatement, visitShiftExpression, visitSwitchStatement, visitTypeDeclarationStatement, visitTypeNameExpression, visitUnaryMinusExpression, visitUnaryPlusExpression, visitUnaryPromoteExpression, visitVariableDeclarationStatement, visitWhileStatement
 
Methods inherited from class at.dms.kjc.SLIREmptyVisitor
visitDynamicToken, visitFileReader, visitFileWriter, visitFunctionPointer, visitIdentity, visitInlineAssembly, visitMainFunction, visitNode, visitPeekExpression, visitPopExpression, visitPortal, 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, visitAssignmentExpression, visitCatchClause, visitClassBody, visitClassDeclaration, visitClassImport, visitComment, visitComments, visitCompilationUnit, visitConstructorDeclaration, visitInnerClassDeclaration, visitInstanceofExpression, visitInterfaceDeclaration, visitJavadoc, visitMethodCallExpression, visitMethodDeclaration, visitNewArrayExpression, visitPackageImport, visitPackageName, visitQualifiedAnonymousCreation, visitQualifiedInstanceCreation, visitSynchronizedStatement, visitThrowStatement, visitTryCatchStatement, visitTryFinallyStatement, visitUnqualifiedAnonymousCreation, visitUnqualifiedInstanceCreation, visitVariableDefinition
 
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.common.CodeGenerator
getPrinter
 

Field Detail

isInit

protected boolean isInit
true if we are currently visiting the init function


method

protected JMethodDeclaration method
the current function we are visiting

Constructor Detail

ToC

public ToC()

ToC

public ToC(CodegenPrintWriter p)
Method Detail

declareInitializedArray

protected void declareInitializedArray(CType type,
                                       String ident,
                                       JExpression expr)
Prints initialization for an array with static initializer, e.g., "int A[2] = {1,2};" To promote code reuse with other backends, inputs a visitor to do the recursive call.


visitFieldDeclaration

public void visitFieldDeclaration(JFieldDeclaration self,
                                  int modifiers,
                                  CType type,
                                  String ident,
                                  JExpression expr)
prints a field declaration

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

visitIfStatement

public void visitIfStatement(JIfStatement self,
                             JExpression cond,
                             JStatement thenClause,
                             JStatement elseClause)
prints a if statement

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

visitThisExpression

public void visitThisExpression(JThisExpression self,
                                JExpression prefix)
prints a this expression

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

visitSuperExpression

public void visitSuperExpression(JSuperExpression self)
prints a super expression

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

visitRelationalExpression

public void visitRelationalExpression(JRelationalExpression self,
                                      int oper,
                                      JExpression left,
                                      JExpression right)
prints a relational expression

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

visitNameExpression

public void visitNameExpression(JNameExpression self,
                                JExpression prefix,
                                String ident)
prints a name expression There should be no surviving JNameExpression's from the front end. We use them in the backend for two purposes when coding in SIR but wanting to know that a C / C++ code generator will produce.

(1) Name with no prefix -- used to print an untyped string: such as a symbolic constant 'PI'. (2) Name with a prefix: The uniprocessor backend co-opted this to print 'prefix->string' TODO: It seems that they should have used a BinaryExpression

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

visitBinaryExpression

public void visitBinaryExpression(JBinaryExpression self,
                                  String oper,
                                  JExpression left,
                                  JExpression right)
prints an binary expression

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

visitFieldExpression

public void visitFieldExpression(JFieldAccessExpression self,
                                 JExpression left,
                                 String ident)
prints a field expression

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

visitBitwiseExpression

public void visitBitwiseExpression(JBitwiseExpression self,
                                   int oper,
                                   JExpression left,
                                   JExpression right)
prints a bitwise expression

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

visitArrayLengthExpression

public void visitArrayLengthExpression(JArrayLengthExpression self,
                                       JExpression prefix)
prints an array length expression

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

visitArrayAccessExpression

public void visitArrayAccessExpression(JArrayAccessExpression self,
                                       JExpression prefix,
                                       JExpression accessor)
prints an array access expression

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

visitCreatePortalExpression

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

visitInitStatement

public void visitInitStatement(SIRInitStatement self,
                               SIRStream stream)
Description copied from class: SLIREmptyVisitor
Visits an init statement.

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

visitInterfaceTable

public void visitInterfaceTable(SIRInterfaceTable self)
Description copied from class: SLIREmptyVisitor
Visits an interface table.

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

visitLatency

public void visitLatency(SIRLatency self)
Description copied from class: SLIREmptyVisitor
Visits a latency.

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

visitLatencyMax

public void visitLatencyMax(SIRLatencyMax self)
Description copied from class: SLIREmptyVisitor
Visits a max latency.

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

visitLatencyRange

public void visitLatencyRange(SIRLatencyRange self)
Description copied from class: SLIREmptyVisitor
Visits a latency range.

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

visitLatencySet

public void visitLatencySet(SIRLatencySet self)
Description copied from class: SLIREmptyVisitor
Visits a latency set.

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

visitMessageStatement

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

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

passParentheses

public JExpression passParentheses(JExpression exp)

visitSwitchLabel

public void visitSwitchLabel(JSwitchLabel self,
                             JExpression expr)
prints an array length expression

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

visitSwitchGroup

public void visitSwitchGroup(JSwitchGroup self,
                             JSwitchLabel[] labels,
                             JStatement[] stmts)
prints an array length expression

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

visitBooleanLiteral

public void visitBooleanLiteral(boolean value)
prints a boolean literal

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

visitByteLiteral

public void visitByteLiteral(byte value)
prints a byte literal

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

visitCharLiteral

public void visitCharLiteral(char value)
prints a character literal

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

visitDoubleLiteral

public void visitDoubleLiteral(double value)
prints a double literal

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

visitFloatLiteral

public void visitFloatLiteral(float value)
prints a float literal

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

visitIntLiteral

public void visitIntLiteral(int value)
prints a int literal

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

visitLongLiteral

public void visitLongLiteral(long value)
prints a long literal

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

visitShortLiteral

public void visitShortLiteral(short value)
prints a short literal

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

visitStringLiteral

public void visitStringLiteral(String value)
prints a string literal

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

visitNullLiteral

public void visitNullLiteral()
prints a null literal

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

visitFormalParameters

public void visitFormalParameters(JFormalParameter self,
                                  boolean isFinal,
                                  CType type,
                                  String ident)
prints an array length expression

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

visitArgs

public void visitArgs(JExpression[] args,
                      int base)
prints an array length expression


visitConstructorCall

public void visitConstructorCall(JConstructorCall self,
                                 boolean functorIsThis,
                                 JExpression[] params)
prints an array length expression

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

visitArrayInitializer

public void visitArrayInitializer(JArrayInitializer self,
                                  JExpression[] elems)
prints an array initializer expression

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

clear

public void clear()
clear the internal String that represents the code generated so far


setDeclOnly

public void setDeclOnly(boolean declOnly)
Parameters:
declOnly - The declOnly to set.

isDeclOnly

public boolean isDeclOnly()
Returns:
Returns the declOnly.