Program Listing for File unparseFortran.h

Program Listing for File unparseFortran.h#

↰ Return to documentation for file (src/backend/unparser/FortranCodeGeneration/unparseFortran.h)

/* unparser.h
 * This header file contains the class declaration for the newest unparser. Six
 * C files include this header file: unparser.C, modified_sage.C, unparse_stmt.C,
 * unparse_expr.C, unparse_type.C, and unparse_sym.C.
 */

#ifndef UNPARSER_FORTRAN
#define UNPARSER_FORTRAN

#include "unparser.h"

class FortranCodeGeneration_locatedNode : public UnparseLanguageIndependentConstructs
   {
     public:
       // FortranCodeGeneration_locatedNode(Unparser* unp, string fname) : UnparseLanguageIndependentConstructs(unp,fname) {};
          FortranCodeGeneration_locatedNode(Unparser* unp, std::string fname);

          virtual ~FortranCodeGeneration_locatedNode();

#if 0
#if USE_OLD_MECHANISM_OF_HANDLING_PREPROCESSING_INFO

#error "DEAD CODE!: I think this is OLD code that can be removed."

          void unparseDirectives(SgStatement* stmt);
          void unparseFinalDirectives ( char* filename );

          void unparseDirectivesUptoButNotIncludingCurrentStatement ( SgStatement* stmt );
          void unparseDirectivesSharingLineWithStatement ( SgStatement* stmt );

       // lower level member function called by unparseDirectives() and unparseFinalDirectives()
          void unparseDirectives ( char* currentFilename, int currentPositionInListOfDirectives, int currentStatementLineNumber );
#else
          virtual void unparseAttachedPreprocessingInfo(SgStatement* stmt, SgUnparse_Info& info,
                                                PreprocessingInfo::RelativePositionType whereToUnparse);
#endif
#endif

          virtual void unparseFortranIncludeLine ( SgStatement* stmt, SgUnparse_Info& info );

          virtual void unparseStatementNumbers ( SgStatement* stmt, SgUnparse_Info& info );
       // virtual void unparseStatementNumbers ( SgStatement* stmt );

          void unparseStatementNumbersSupport ( SgLabelRefExp* numeric_label_exp, SgUnparse_Info& info );
       // void unparseStatementNumbersSupport ( SgLabelSymbol* numeric_label_symbol, SgUnparse_Info& info );
       // void unparseStatementNumbersSupport ( SgLabelSymbol* numeric_label );
       // void unparseStatementNumbersSupport ( int value );

       // DQ (8/15/2007): Build a fortran specific version of this function.
          void unparse_helper (SgFunctionDeclaration* funcdecl_stmt, SgUnparse_Info& info);

          void unparseFunctionArgs(SgFunctionDeclaration* funcdecl_stmt, SgUnparse_Info& info);
          void unparseFunctionParameterDeclaration ( SgFunctionDeclaration* funcdecl_stmt,
                                                     SgInitializedName* initializedName,
                                                     bool outputParameterDeclaration,
                                                     SgUnparse_Info& info );

       // DQ (12/21/2005): Added to support name qualification when explicitly stored in the AST
       // (rather than generated).
       // virtual void unparseQualifiedNameList(const SgQualifiedNamePtrList & qualifiedNameList);

       // DQ (8/14/2007): This is where all the language specific statement unparsing is done
          virtual void unparseLanguageSpecificStatement (SgStatement*  stmt, SgUnparse_Info& info);
          virtual void unparseLanguageSpecificExpression(SgExpression* expr, SgUnparse_Info& info);

       // DQ (9/6/2010): Mark the derived class to support debugging.
          virtual std::string languageName() const { return "Fortran Unparser"; }

       // DQ (4/25/2005): Made this virtual so that Gabriel could build a specialized unparser.
       // virtual void unparseExpression              (SgExpression* expr, SgUnparse_Info& info);

          virtual void unparseUnaryOperator           (SgExpression* expr, const char* op, SgUnparse_Info& info);
          virtual void unparseBinaryOperator          (SgExpression* expr, const char* op, SgUnparse_Info& info);
       // virtual void unparseUnaryExpr               (SgExpression* expr, SgUnparse_Info& info);
       // virtual void unparseBinaryExpr              (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseAssnExpr                (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseExprRoot                (SgExpression* expr, SgUnparse_Info& info);

       // DQ (3/28/2017): Switched this back to match the base class virtual function signature as part of fixing warnings.
       // Plus it appears that the additional function argument was always false.
       // virtual void unparseExprList                (SgExpression* expr, SgUnparse_Info& info);
       // DQ (8/14/2007): Accept the use of the bool for now, but swith to information communicated through info object!
       // This function is different from the base class version (and it should be the same).
       // virtual void unparseExprList                (SgExpression* expr, SgUnparse_Info& info, bool paren);
          virtual void unparseExprList                (SgExpression* expr, SgUnparse_Info& info);

          virtual void unparseVarRef                  (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseClassRef                (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseFuncRef                 (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseMFuncRef                (SgExpression* expr, SgUnparse_Info& info);

       // DQ (11/10/2005): Added general support for SgValue (so that we could unparse
       // expression trees from contant folding)
       // virtual void unparseValue                   (SgExpression* expr, SgUnparse_Info& info);
#if 0
          virtual void unparseShortVal                (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseCharVal                 (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseUCharVal                (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseWCharVal                (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseStringVal               (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseUShortVal               (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseEnumVal                 (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseIntVal                  (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseUIntVal                 (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseLongIntVal              (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseLongLongIntVal          (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseULongLongIntVal         (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseULongIntVal             (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseFloatVal                (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseDoubleVal               (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseLongDoubleVal           (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseComplexVal              (SgExpression* expr, SgUnparse_Info& info);
#else
          virtual void unparseStringVal               (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseBoolVal                 (SgExpression* expr, SgUnparse_Info& info);
#endif
          virtual void unparseFuncCall                (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparsePointStOp               (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseRecRef                  (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseDotStarOp               (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseArrowStarOp             (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseEqOp                    (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseLtOp                    (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseGtOp                    (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseNeOp                    (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseLeOp                    (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseGeOp                    (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseAddOp                   (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseSubtOp                  (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseMultOp                  (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseDivOp                   (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseIntDivOp                (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseModOp                   (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseAndOp                   (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseOrOp                    (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseBitXOrOp                (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseBitAndOp                (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseBitOrOp                 (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseCommaOp                 (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseLShiftOp                (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseRShiftOp                (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseUnaryMinusOp            (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseUnaryAddOp              (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseSizeOfOp                (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseTypeIdOp                (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseNotOp                   (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseDerefOp                 (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseAddrOp                  (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseMinusMinusOp            (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparsePlusPlusOp              (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseAbstractOp              (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseBitCompOp               (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseExprCond                (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseClassInitOp             (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseDyCastOp                (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseCastOp                  (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseArrayOp                 (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseNewOp                   (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseDeleteOp                (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseThisNode                (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseScopeOp                 (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseAssnOp                  (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparsePointerAssnOp           (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparsePlusAssnOp              (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseMinusAssnOp             (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseAndAssnOp               (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseIOrAssnOp               (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseMultAssnOp              (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseDivAssnOp               (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseModAssnOp               (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseXorAssnOp               (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseLShiftAssnOp            (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseRShiftAssnOp            (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseForDeclOp               (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseTypeRef                 (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseVConst                  (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseExprInit                (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseInitializerList         (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseAggrInit                (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseConInit                 (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseAssnInit                (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseThrowOp                 (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseVarArgStartOp           (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseVarArgStartOneOperandOp (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseVarArgOp                (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseVarArgEndOp             (SgExpression* expr, SgUnparse_Info& info);
//        virtual void unparseVarArgCopyOp            (SgExpression* expr, SgUnparse_Info& info);
       // virtual void unparseNullExpression          (SgExpression* expr, SgUnparse_Info& info);


       // DQ (8/14/2007): Fortran specific member functions
       // virtual void unparseIntrinsic                (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseExpOp                    (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseSubscriptExpr            (SgExpression* expr, SgUnparse_Info& info);
       // virtual void unparseSubColon                 (SgExpression* expr, SgUnparse_Info& info);

       // DQ (11/18/2007): Added support for ":" in declarations
          virtual void unparseColonShapeExp            (SgExpression* expr, SgUnparse_Info& info);
       // virtual void unparseSubAsterick              (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseAsteriskShapeExp         (SgExpression* expr, SgUnparse_Info& info);

       // DQ (10/4/2008): I no longer agree that these are expressions, they are just parts of the SgUseStatment.
       // virtual void unparseUseRename                (SgExpression* expr, SgUnparse_Info& info);
       // virtual void unparseUseOnly                  (SgExpression* expr, SgUnparse_Info& info);

          virtual void unparseIOItemExpr               (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseImpliedDo                (SgExpression* expr, SgUnparse_Info& info);

          virtual void unparseConcatenationOp          (SgExpression* expr, SgUnparse_Info& info);

       // DQ (11/24/2007): These will be translated away in a post-processing step, but allow them to be unparsed for debugging
          virtual void unparseUnknownArrayOrFunctionReference (SgExpression* expr, SgUnparse_Info& info);

          virtual bool isSubroutineCall                (SgFunctionCallExp* fcall);

       // DQ (10/10/2008): Added support for unser defined unary and binary operators.
          virtual void unparseUserDefinedUnaryOp       (SgExpression* expr, SgUnparse_Info& info);
          virtual void unparseUserDefinedBinaryOp      (SgExpression* expr, SgUnparse_Info& info);

          virtual void unparseModuleStmt               (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseProgHdrStmt              (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseProcHdrStmt              (SgStatement* stmt, SgUnparse_Info& info);
          virtual void genPUAutomaticStmts             (SgStatement* stmt, SgUnparse_Info& info);

          virtual void unparseInterfaceStmt            (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseCommonBlock              (SgStatement* stmt, SgUnparse_Info& info);

          virtual void unparseFuncArgs                 (SgInitializedNamePtrList* args, SgUnparse_Info& info);
          virtual void unparseInitNamePtrList          (SgInitializedNamePtrList* args, SgUnparse_Info& info);
          virtual void printAccessModifier             (SgDeclarationStatement * decl_stmt, SgUnparse_Info & info);

          virtual void printStorageModifier            (SgDeclarationStatement* decl_stmt, SgUnparse_Info& info);
          virtual void unparseVarDecl                  (SgStatement* stmt, SgInitializedName* initializedName, SgUnparse_Info& info);
          virtual void unparseParamDeclStmt            (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseUseStmt                  (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseDoStmt                   (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseProcessControlStmt       (SgStatement* stmt, SgUnparse_Info& info);

       // virtual void unparseIOStmt                   (SgStatement* stmt, SgUnparse_Info& info);
       // virtual void unparse_IO_ControlStatement     (SgStatement* stmt, SgUnparse_Info& info);

          virtual void unparsePrintStatement           (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseReadStatement            (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseWriteStatement           (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseOpenStatement            (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseCloseStatement           (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseInquireStatement         (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseFlushStatement           (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseRewindStatement          (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseBackspaceStatement       (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseEndfileStatement         (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseWaitStatement            (SgStatement* stmt, SgUnparse_Info& info);

          virtual void unparseSyncAllStatement         (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseSyncImagesStatement      (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseSyncMemoryStatement      (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseSyncTeamStatement        (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseLockStatement            (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseUnlockStatement          (SgStatement* stmt, SgUnparse_Info& info);

          virtual void unparse_Image_Ctrl_Stmt_Support (SgImageControlStatement* stmt, bool print_comma, SgUnparse_Info& info);


          virtual void unparseAssociateStatement       (SgStatement* stmt, SgUnparse_Info& info);

       // Unparse base class data members
       // virtual void unparse_IO_Support              (SgStatement* stmt, bool skipUnit, SgUnparse_Info& info);
          virtual bool unparse_IO_Support              (SgStatement* stmt, bool skipUnit, SgUnparse_Info& info);
          virtual void unparse_IO_Control_Support      ( std::string name, SgExpression* expr, bool isLeadingEntry, SgUnparse_Info& info);

       // virtual void unparseInOutStmt                (SgStatement* stmt, SgUnparse_Info& info);
       // virtual void unparseIOFileControlStatement   (SgStatement* stmt, SgUnparse_Info& info);

          virtual void printDeclModifier               (SgDeclarationStatement* decl_stmt, SgUnparse_Info & info);

          virtual void unparseImplicitStmt             (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseBlockDataStmt            (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseStatementFunctionStmt    (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseWhereStmt                (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseElseWhereStmt            (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseNullifyStmt              (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseEquivalenceStmt          (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseArithmeticIfStmt         (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseAssignStmt               (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseComputedGotoStmt         (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseAssignedGotoStmt         (SgStatement* stmt, SgUnparse_Info& info);


       // DQ (4/25/2005): Made this virtual so that Gabriel could build a specialized unparser.
       // virtual void unparseStatement        (SgStatement* stmt, SgUnparse_Info& info);
       // virtual void unparseGlobalStmt       (SgStatement* stmt, SgUnparse_Info& info);
       // CI
       // virtual void unparseDeclStmt         (SgStatement* stmt, SgUnparse_Info& info);
//        virtual void unparseScopeStmt        (SgStatement* stmt, SgUnparse_Info& info);
       // virtual void unparseFuncTblStmt      (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseBasicBlockStmt   (SgStatement* stmt, SgUnparse_Info& info);
       // CI
       // virtual void unparseElseIfStmt       (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseIfStmt           (SgStatement* stmt, SgUnparse_Info& info);
//        virtual void unparseWhereStmt        (SgStatement* stmt, SgUnparse_Info& info);
//        virtual void unparseForInitStmt      (SgStatement* stmt, SgUnparse_Info& info);
//        virtual void unparseForStmt          (SgStatement* stmt, SgUnparse_Info& info);
//        virtual void unparseFuncDeclStmt     (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseFuncDefnStmt     (SgStatement* stmt, SgUnparse_Info& info);
//        virtual void unparseMFuncDeclStmt    (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseVarDeclStmt      (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseVarDefnStmt      (SgStatement* stmt, SgUnparse_Info& info);
       // virtual void unparseClassDeclStmt    (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseClassDeclStmt_module      (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseClassDeclStmt_derivedType (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseClassDefnStmt    (SgStatement* stmt, SgUnparse_Info& info);
//        virtual void unparseEnumDeclStmt     (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseExprStmt         (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseLabelStmt        (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseWhileStmt        (SgStatement* stmt, SgUnparse_Info& info);
//        virtual void unparseDoWhileStmt      (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseSwitchStmt       (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseCaseStmt         (SgStatement* stmt, SgUnparse_Info& info);
//        virtual void unparseTryStmt          (SgStatement* stmt, SgUnparse_Info& info);
//        virtual void unparseCatchStmt        (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseDefaultStmt      (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseBreakStmt        (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseContinueStmt     (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseReturnStmt       (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseGotoStmt         (SgStatement* stmt, SgUnparse_Info& info);
//        virtual void unparseAsmStmt          (SgStatement* stmt, SgUnparse_Info& info);
//        virtual void unparseSpawnStmt        (SgStatement* stmt, SgUnparse_Info& info);
       // CI
       // virtual void unparseParStmt          (SgStatement* stmt, SgUnparse_Info& info);
       // CI
       // virtual void unparseParForStmt       (SgStatement* stmt, SgUnparse_Info& info);
//        virtual void unparseTypeDefStmt      (SgStatement* stmt, SgUnparse_Info& info);
//        virtual void unparseTemplateDeclStmt (SgStatement* stmt, SgUnparse_Info& info);
//        virtual void unparseNullStatement    (SgStatement* stmt, SgUnparse_Info& info);

       // DQ (11/17/2007): support for type attributes when used as statements.
          virtual void unparseAttributeSpecificationStatement (SgStatement* stmt, SgUnparse_Info& info);

       // DQ (11/19/2007): support for type attributes when used as statements.
          virtual void unparseNamelistStatement (SgStatement* stmt, SgUnparse_Info& info);

       // DQ (11/21/2007): support for import statement (F2003)
          virtual void unparseImportStatement  (SgStatement* stmt, SgUnparse_Info& info);

       // DQ (11/23/2007): support for bind attributes for declarations (F2003)
          virtual void unparseBindAttribute    (SgDeclarationStatement* declaration );

          virtual void unparseFormatStatement  (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseFormatItemList   (SgFormatItemList* formatItemList, SgUnparse_Info& info);

          virtual void unparseForAllStatement       (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseDoConcurrentStatement (SgStatement* stmt, SgUnparse_Info& info);

          virtual void unparseContainsStatement(SgStatement* stmt, SgUnparse_Info& info);

          virtual void unparseEntryStatement   (SgStatement* stmt, SgUnparse_Info& info);

       // DQ (7/21/2006): Added support for GNU statement expression extension.
//        virtual void unparseStatementExpression (SgExpression* expr, SgUnparse_Info& info);

      // DQ (7/22/2006): Added support for asm operands.
//       virtual void unparseAsmOp (SgExpression* expr, SgUnparse_Info& info);
//       virtual void unparse_asm_operand_modifier(SgAsmOp::asm_operand_modifier_enum flags);
//       std::string unparse_register_name (SgInitializedName::asm_register_name_enum register_name);

       // DQ (2/29/2004): Added to support unparsing of template instantiations (similar to class declarations)
//        virtual void unparseTemplateInstantiationDeclStmt               (SgStatement* stmt, SgUnparse_Info& info);

       // DQ (3/24/2004): Added to support template functions and template member functions
//        virtual void unparseTemplateInstantiationFunctionDeclStmt       (SgStatement* stmt, SgUnparse_Info& info);
//        virtual void unparseTemplateInstantiationMemberFunctionDeclStmt (SgStatement* stmt, SgUnparse_Info& info);

       // DQ (4/16/2005): Added support for explicit template directives
//        virtual void unparseTemplateInstantiationDirectiveStmt          (SgStatement* stmt, SgUnparse_Info& info);

          virtual void unparsePragmaDeclStmt   (SgStatement* stmt, SgUnparse_Info& info);

       // DQ (5/1/2004): Added support for unparsing namespace constructs
//        virtual void unparseNamespaceDeclarationStatement      ( SgStatement* stmt, SgUnparse_Info & info );
//        virtual void unparseNamespaceDefinitionStatement       ( SgStatement* stmt, SgUnparse_Info & info );
//        virtual void unparseNamespaceAliasDeclarationStatement ( SgStatement* stmt, SgUnparse_Info & info );
//        virtual void unparseUsingDirectiveStatement            ( SgStatement* stmt, SgUnparse_Info & info );
//        virtual void unparseUsingDeclarationStatement          ( SgStatement* stmt, SgUnparse_Info & info );

       // DQ (10/14/2004): Supporting function shared by unparseClassDecl and unparseClassType
          void initializeDeclarationsFromParent ( SgDeclarationStatement* declarationStatement,
                                                  SgClassDefinition* & cdefn,
                                                  SgNamespaceDefinitionStatement* & namespaceDefn, int debugSupport = 0 );

       // DQ (12/1/2007): Need to handle kind and type parameters.
          void unparseModifierType(SgType* type, SgUnparse_Info& info);

       // DQ (12/9/2007): Added support for output of labels (to support arithmetic if)
          void unparseLabel ( SgLabelRefExp* exp );
       // void unparseLabel ( SgLabelSymbol* symbol );

          virtual void unparseLabelRefExp(SgExpression* expr, SgUnparse_Info& info);

          virtual void unparseActualArgumentExpression(SgExpression* expr, SgUnparse_Info& info);

#if 0
          std::string trimGlobalScopeQualifier ( std::string qualifiedName );
#endif
#if 0
          virtual void unparseExceptionSpecification( SgTypePtrList* exceptionSpecifierList, SgUnparse_Info& info);
#endif

#if USE_OLD_MECHANISM_OF_HANDLING_PREPROCESSING_INFO
          void getDirectives ( char* sourceFilename );
#endif

       // DQ (1/30/2009): Added support for Fortran allocate and deallocate statements.
          void unparseAllocateStatement(SgStatement* stmt, SgUnparse_Info& info);
          void unparseDeallocateStatement(SgStatement* stmt, SgUnparse_Info& info);

          void run_unparser();

       // support for Rice Coarray Fortran 2.0
          void unparseWithTeamStatement(SgStatement* stmt, SgUnparse_Info& info);
          void unparseCoArrayExpression      (SgExpression* expr, SgUnparse_Info& info);
          void curprint(const std::string&) const;

       // Liao 10/20/2010 common unparsing support for OpenMP AST
          virtual void unparseOmpPrefix          (SgUnparse_Info& info);
          virtual void unparseOmpDoStatement     (SgStatement* stmt, SgUnparse_Info& info);
          virtual void unparseOmpBeginDirectiveClauses     (SgStatement* stmt,SgUnparse_Info& info);
          virtual void unparseOmpEndDirectiveClauses       (SgStatement* stmt,     SgUnparse_Info& info);
          virtual void unparseOmpEndDirectivePrefixAndName (SgStatement* stmt, SgUnparse_Info& info);

          virtual bool requiresParentheses(SgExpression* expr, SgUnparse_Info& info);
          virtual PrecedenceSpecifier getPrecedence(SgExpression* exp);

     private:
          void unparseArrayAttr(SgArrayType* type, SgUnparse_Info& info, bool oneVarOnly);

          void unparseStringAttr(SgTypeString* type, SgUnparse_Info& info, bool oneVarOnly);

          void unparseEntityTypeAttr(SgType* type, SgUnparse_Info& info, bool oneVarOnly);
};

#endif