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
|