From: <bl...@us...> - 2003-05-28 07:32:51
|
Update of /cvsroot/cpptool/rfta/include/rfta/refactoring In directory sc8-pr-cvs1:/tmp/cvs-serv17275/include/rfta/refactoring Added Files: CodeModelGenerator.h Log Message: * renamed CodeModel.[ch] to CodeModelGenerator.[ch] * introduced a level of indirection between the code model and ast node, there allowing for alternative parser implementation. --- NEW FILE: CodeModelGenerator.h --- // ////////////////////////////////////////////////////////////////////////// // (c)Copyright 2002, Baptiste Lepilleur. // Created: 2002/12/21 // ////////////////////////////////////////////////////////////////////////// #ifndef RFTA_CODEMODELGENERATOR_H #define RFTA_CODEMODELGENERATOR_H #include <rfta/refactoring/Config.h> #include <rfta/refactoring/CodeModelForward.h> #include <rfta/parser/ASTNodeForward.h> #include <rfta/parser/ASTNodeType.h> #include <map> #include <stdexcept> namespace Refactoring { namespace CodeModel { class RFTA_API GeneratorError : public std::logic_error { public: GeneratorError( const std::string &message ); ~GeneratorError() throw(); }; class RFTA_API Generator { public: friend class CodeModelGeneratorTest; Generator(); virtual ~Generator(); FunctionDeclarationPtr generateFunctionDeclaration( const ASTNodePtr &functionDeclNode ); CompoundStatementPtr generateCompound( const ASTNodePtr &compoundNode ); private: StatementPtr generateStatement( const ASTNodePtr &statementNode ); StatementPtr generateBreakStatement( const ASTNodePtr &statement ); StatementPtr generateCaseStatement( const ASTNodePtr &statement ); StatementPtr generateCompoundStatement( const ASTNodePtr &statement ); StatementPtr generateDeclarationStatement( const ASTNodePtr &statement ); StatementPtr generateDefaultStatement( const ASTNodePtr &statement ); StatementPtr generateDoStatement( const ASTNodePtr &statement ); StatementPtr generateExpressionStatement( const ASTNodePtr &statement ); StatementPtr generateForStatement( const ASTNodePtr &statement ); StatementPtr generateIfStatement( const ASTNodePtr &statement ); StatementPtr generateNullStatement( const ASTNodePtr &statement ); StatementPtr generateReturnStatement( const ASTNodePtr &statement ); StatementPtr generateSwitchStatement( const ASTNodePtr &statement ); StatementPtr generateWhileStatement( const ASTNodePtr &statement ); ExpressionPtr generateExpression( const ASTNodePtr &expression ); ExpressionPtr generateDeclaratorExpression( const ASTNodePtr &expression ); ExpressionPtr generateGenericExpression( const ASTNodePtr &expression ); ExpressionPtr generateNullExpression( const ASTNodePtr &expression ); DeclaratorExpressionPtr generateDeclarator( const ASTNodePtr &expression ); private: void setElementSource( Element &element, const ASTNodePtr &node ); TypePartPtr getDeclaratorPrimaryType( const ASTNodePtr &declaratorNode ); TypePartPtr makeOptionalType( const ASTNodePtr &typeNode ); IdentifierPtr makeIdentifier( const ASTNodePtr &identifierNode ); DeclaratorPtr makeVariableDeclarator( const ASTNodePtr &variableDeclaratorNode ); ExpressionPtr makeVariableInitializerExpression( const ASTNodePtr &initializerNode ); typedef StatementPtr (Generator::*GeneratorFunction)( const ASTNodePtr &statementNode ); void addStatement( const ASTNodeType &type, GeneratorFunction function ); typedef std::map<ASTNodeType, GeneratorFunction> Generators; Generators statementGenerators_; }; } // namespace CodeModel } // namespace Refactoring #endif // RFTA_CODEMODELGENERATOR_H |