Program Listing for File FortranParserState.h

Program Listing for File FortranParserState.h#

Return to documentation for file (src/backend/unparser/languageIndependenceSupport/FortranParserState.h)

#ifndef __FORTRANPARSERSTATE_H_
#define __FORTRANPARSERSTATE_H_

//#include "rose.h"
#include "fortran_support.h"

#define astScopeStack              (*(FortranParserState::getCurrentScopeStack()))
#define astExpressionStack         (*(FortranParserState::getCurrentExpressionStack()))
#define astNodeStack               (*(FortranParserState::getCurrentNodeStack()))
#define astNameStack               (*(FortranParserState::getCurrentNameStack()))
#define astTypeStack               (*(FortranParserState::getCurrentTypeStack()))
#define astBaseTypeStack           (*(FortranParserState::getCurrentBaseTypeStack()))
#define astIntentSpecStack         (*(FortranParserState::getCurrentIntentSpecStack()))
#define astAttributeSpecStack      (*(FortranParserState::getCurrentAttributeSpecStack()))
#define astInitializerStack        (*(FortranParserState::getCurrentInitializerStack()))
#define astTypeKindStack           (*(FortranParserState::getCurrentTypeKindStack()))
#define astTypeParameterStack      (*(FortranParserState::getCurrentTypeParameterStack()))
#define astLabelSymbolStack        (*(FortranParserState::getCurrentLabelSymbolStack()))
#define astIfStatementStack        (*(FortranParserState::getCurrentIfStatementStack()))
#define astActualArgumentNameStack (*(FortranParserState::getCurrentActualArgumentNameStack()))
#define astFunctionAttributeStack  (*(FortranParserState::getCurrentFunctionAttributeStack()))
#define astIncludeStack            (*(FortranParserState::getCurrentIncludeStack()))


using std::string;
using std::map;
using std::stack;
using std::list;
using std::vector;


class FortranParserState
  {

     private:
       static stack<FortranParserState*>  statesStack;

     private:
       list<SgScopeStatement*> currScopeStack;
       list<SgExpression*>     currExpressionStack;
       list<SgNode*>           currNodeStack;
       AstNameListType         currNameStack;
       list<SgType*>           currTypeStack;
       list<SgType*>           currBaseTypeStack;
       list<int>               currIntentSpecStack;
       list<int>               currAttributeSpecStack;
       list<SgExpression*>     currInitializerStack;
       list<SgExpression*>     currTypeKindStack;
       list<SgExpression*>     currTypeParameterStack;
       list<SgLabelSymbol*>    currLabelSymbolStack;
       list<SgIfStmt*>         currIfStatementStack;
       AstNameListType         currActualArgumentNameStack;
       AstNameListType         currFunctionAttributeStack;
       vector<string>          currAstIncludeStack;

       void clearStacks();

     public:

       // following functions will called by macro in ofp-rose connection files
       static  list<SgScopeStatement*>  *getCurrentScopeStack()
          { return &(statesStack.top()->currScopeStack); }

       static  list<SgExpression*>      *getCurrentExpressionStack()
          { return &(statesStack.top()->currExpressionStack); }

       static  list<SgNode*>            *getCurrentNodeStack()
          { return &(statesStack.top()->currNodeStack); }

       static  AstNameListType          *getCurrentNameStack()
          { return &(statesStack.top()->currNameStack); }

       static  list<SgType*>            *getCurrentTypeStack()
          { return &(statesStack.top()->currTypeStack); }

       static  list<SgType*>            *getCurrentBaseTypeStack()
          { return &(statesStack.top()->currBaseTypeStack); }

       static  list<int>                *getCurrentIntentSpecStack()
          { return &(statesStack.top()->currIntentSpecStack); }

       static  list<int>                *getCurrentAttributeSpecStack()
          { return &(statesStack.top()->currAttributeSpecStack); }

       static  list<SgExpression*>      *getCurrentInitializerStack()
          { return &(statesStack.top()->currInitializerStack); }

       static  list<SgExpression*>      *getCurrentTypeKindStack()
          { return &(statesStack.top()->currTypeKindStack); }

       static  list<SgExpression*>      *getCurrentTypeParameterStack()
          { return &(statesStack.top()->currTypeParameterStack); }

       static  list<SgLabelSymbol*>     *getCurrentLabelSymbolStack()
          { return &(statesStack.top()->currLabelSymbolStack); }

       static  list<SgIfStmt*>          *getCurrentIfStatementStack()
          { return &(statesStack.top()->currIfStatementStack); }

       static  AstNameListType          *getCurrentActualArgumentNameStack()
          { return &(statesStack.top()->currActualArgumentNameStack); }

       static  AstNameListType          *getCurrentFunctionAttributeStack()
          { return &(statesStack.top()->currFunctionAttributeStack); }

       static  vector<string>          *getCurrentIncludeStack()
          { return &(statesStack.top()->currAstIncludeStack); }

       //Constructor:
       //   push "this" object of FortranParserState into the "statesStack"
       FortranParserState();


       // Destructor:
       //   Pop out the stack, clean all the member stacks
       ~FortranParserState();

  };

#endif /*__FORTRANPARSERSTATE_H_*/