Program Listing for File markTemplateInstantiationsForOutput.h

Program Listing for File markTemplateInstantiationsForOutput.h#

Return to documentation for file (src/frontend/SageIII/astPostProcessing/markTemplateInstantiationsForOutput.h)

#ifndef MARK_TEMPLATE_INSTANTIATION_FOR_OUTPUT_H
#define MARK_TEMPLATE_INSTANTIATION_FOR_OUTPUT_H

// DQ (5/27/2005):
void markTemplateInstantiationsForOutput( SgNode* node );



class MarkTemplateInstantiationsForOutputSupportInheritedAttribute
   {
     public:
          bool insideDeclarationToOutput;

          MarkTemplateInstantiationsForOutputSupportInheritedAttribute();
   };

class MarkTemplateInstantiationsForOutputSupportSynthesizedAttribute
   {
     public:
          MarkTemplateInstantiationsForOutputSupportSynthesizedAttribute();
   };

// DQ (6/21/2005): This class controls the output of template declarations in the generated code (by the unparser).
class MarkTemplateInstantiationsForOutputSupport
   : public SgTopDownBottomUpProcessing<MarkTemplateInstantiationsForOutputSupportInheritedAttribute,
                                        MarkTemplateInstantiationsForOutputSupportSynthesizedAttribute>
   {
     public:
          SgSourceFile* currentFile;

       // List of declarations referenced in source code or functions and member
       // functions marked as to be output in source code.  These are the list
       // of required definitions.
          std::list<SgDeclarationStatement*> listOfTemplateDeclarationsToOutput;

          MarkTemplateInstantiationsForOutputSupport(SgSourceFile* file);

       // Required traversal function
       // void visit (SgNode* node);
          MarkTemplateInstantiationsForOutputSupportInheritedAttribute
               evaluateInheritedAttribute ( SgNode* node, MarkTemplateInstantiationsForOutputSupportInheritedAttribute inheritedAttribute );

          MarkTemplateInstantiationsForOutputSupportSynthesizedAttribute
               evaluateSynthesizedAttribute ( SgNode* node,
                                              MarkTemplateInstantiationsForOutputSupportInheritedAttribute   inheritedAttribute,
                                              SubTreeSynthesizedAttributes synthesizedAttributeList );

     private:
       // Abstract details of saveing defining and non-defining declarations
          void saveDeclaration ( SgDeclarationStatement* declaration );
   };


// DQ (8/27/2005):
class MarkTemplateInstantiationsForOutput
   {
     public:
//        static void BuildTemplateDeclarationLists ( SgFile* file );

          static std::set<SgDeclarationStatement*> BuildSetOfRequiredTemplateDeclarations ( SgNode* node, SgSourceFile* file );

          static void ProcessClassTemplateDeclarations          ( std::set<SgDeclarationStatement*> setOfRequiredDeclarations, SgSourceFile* file );
          static void ProcessFunctionTemplateDeclarations       ( std::set<SgDeclarationStatement*> setOfRequiredDeclarations, SgSourceFile* file );
          static void ProcessMemberFunctionTemplateDeclarations ( std::set<SgDeclarationStatement*> setOfRequiredDeclarations, SgSourceFile* file );



   };


// endif for MARK_TEMPLATE_INSTANTIATION_FOR_OUTPUT_H
#endif