From: <bl...@us...> - 2003-04-06 18:07:02
|
Update of /cvsroot/cpptool/rfta/src/rfta In directory sc8-pr-cvs1:/tmp/cvs-serv21204/src/rfta Modified Files: CodeModel.cpp CodeModelExpressions.cpp CodeModelGeneratorTest.cpp CodeRewriter.cpp CodeWriterInsertTest.cpp CodeWriterInsertTest.h CodeWriterTestBase.cpp CodeWriterTestBase.h Log Message: * added support for inserting multiple variable declarations Index: CodeModel.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeModel.cpp,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** CodeModel.cpp 6 Apr 2003 07:42:16 -0000 1.10 --- CodeModel.cpp 6 Apr 2003 18:06:59 -0000 1.11 *************** *** 358,366 **** ASTNodePtr initializerNode = node->getProperty( ASTNodeProperties::variableInitializerProperty ); if ( !initializerNode ) ! return DeclaratorPtr( new Declarator( type, name, typeSuffix ) ); ExpressionPtr initializer = makeVariableInitializerExpression( initializerNode ); ! return DeclaratorPtr( new Declarator( type, name, typeSuffix, initializer ) ); } --- 358,370 ---- ASTNodePtr initializerNode = node->getProperty( ASTNodeProperties::variableInitializerProperty ); + + TypePartPtr typePtr( new TypePart( type ) ); + TypePartPtr typeSuffixPtr( new TypePart( typeSuffix ) ); + IdentifierPtr namePtr( new Identifier( name ) ); if ( !initializerNode ) ! return DeclaratorPtr( new Declarator( typePtr, namePtr, typeSuffixPtr ) ); ExpressionPtr initializer = makeVariableInitializerExpression( initializerNode ); ! return DeclaratorPtr( new Declarator( typePtr, namePtr, typeSuffixPtr, initializer ) ); } Index: CodeModelExpressions.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeModelExpressions.cpp,v retrieving revision 1.12 retrieving revision 1.13 diff -C2 -d -r1.12 -r1.13 *** CodeModelExpressions.cpp 6 Apr 2003 07:42:16 -0000 1.12 --- CodeModelExpressions.cpp 6 Apr 2003 18:06:59 -0000 1.13 *************** *** 160,166 **** ! Declarator::Declarator( const std::string &type, ! const std::string &name, ! const std::string &typeSuffix ) : type_( type ) , name_( name ) --- 160,182 ---- ! Identifier::Identifier( const std::string &identifier ) ! : identifier_( identifier ) ! { ! } ! ! ! std::string ! Identifier::getIdentifier() const ! { ! if ( isFromSource() ) ! return getSourceText(); ! return identifier_; ! } ! ! ! ! Declarator::Declarator( const TypePartPtr &type, ! const IdentifierPtr &name, ! const TypePartPtr &typeSuffix ) : type_( type ) , name_( name ) *************** *** 170,176 **** ! Declarator::Declarator( const std::string &type, ! const std::string &name, ! const std::string &typeSuffix, const ExpressionPtr &initializer ) : type_( type ) --- 186,192 ---- ! Declarator::Declarator( const TypePartPtr &type, ! const IdentifierPtr &name, ! const TypePartPtr &typeSuffix, const ExpressionPtr &initializer ) : type_( type ) *************** *** 187,191 **** ! std::string Declarator::getType() const { --- 203,207 ---- ! TypePartPtr Declarator::getType() const { *************** *** 195,199 **** void ! Declarator::setType( const std::string &type ) { type_ = type; --- 211,215 ---- void ! Declarator::setType( const TypePartPtr &type ) { type_ = type; *************** *** 201,205 **** ! std::string Declarator::getTypeSuffix() const { --- 217,221 ---- ! TypePartPtr Declarator::getTypeSuffix() const { *************** *** 209,213 **** void ! Declarator::setTypeSuffix( const std::string &typeSuffix ) { typeSuffix_ = typeSuffix; --- 225,229 ---- void ! Declarator::setTypeSuffix( const TypePartPtr &typeSuffix ) { typeSuffix_ = typeSuffix; *************** *** 215,219 **** ! std::string Declarator::getName() const { --- 231,235 ---- ! IdentifierPtr Declarator::getName() const { *************** *** 223,227 **** void ! Declarator::setName( const std::string &name ) { name_ = name; --- 239,243 ---- void ! Declarator::setName( const IdentifierPtr &name ) { name_ = name; *************** *** 248,251 **** --- 264,275 ---- initializer_ = initializer; } + + + void + Declarator::accept( ElementVisitor &visitor ) + { + // @todo baptiste implement this + } + Index: CodeModelGeneratorTest.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeModelGeneratorTest.cpp,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** CodeModelGeneratorTest.cpp 6 Apr 2003 15:11:23 -0000 1.5 --- CodeModelGeneratorTest.cpp 6 Apr 2003 18:06:59 -0000 1.6 *************** *** 55,61 **** CodeModel::DeclaratorPtr declarator = declExpression->getDeclaratorAt(0); ! RFTA_ASSERT_EQUAL( "", declarator->getType() ); ! RFTA_ASSERT_EQUAL( "", declarator->getTypeSuffix() ); ! RFTA_ASSERT_EQUAL( "x", declarator->getName() ); CPPUNIT_ASSERT( declarator->hasInitializer() ); --- 55,61 ---- CodeModel::DeclaratorPtr declarator = declExpression->getDeclaratorAt(0); ! RFTA_ASSERT_EQUAL( "", declarator->getType()->getTypeText() ); ! RFTA_ASSERT_EQUAL( "", declarator->getTypeSuffix()->getTypeText() ); ! RFTA_ASSERT_EQUAL( "x", declarator->getName()->getIdentifier() ); CPPUNIT_ASSERT( declarator->hasInitializer() ); Index: CodeRewriter.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeRewriter.cpp,v retrieving revision 1.36 retrieving revision 1.37 diff -C2 -d -r1.36 -r1.37 *** CodeRewriter.cpp 6 Apr 2003 07:42:16 -0000 1.36 --- CodeRewriter.cpp 6 Apr 2003 18:06:59 -0000 1.37 *************** *** 342,359 **** CodeRewriter::visit( const DeclarationStatementPtr &statement ) { ! if ( isInserting() ) ! { ! DeclaratorExpressionPtr declarators = statement->getDeclaration(); ! ! beginInsertNewStatement(); ! insertText( declarators->getPrimaryType()->getTypeText() ); ! ! DeclaratorPtr declarator = declarators->getDeclaratorAt(0); ! insertText( declarator->getType() ); ! insertText( declarator->getName() ); ! insertText( declarator->getTypeSuffix() ); ! ! endInsertNewStatement(); ! } } --- 342,346 ---- CodeRewriter::visit( const DeclarationStatementPtr &statement ) { ! statement->getDeclaration()->accept( *this ); } *************** *** 647,650 **** --- 634,658 ---- CodeRewriter::visit( const DeclaratorExpressionPtr &expression ) { + if ( isInserting() ) + { + if ( expression->getDeclaratorCount() == 0 ) + return; + + beginInsertNewStatement(); + insertText( expression->getPrimaryType()->getTypeText() ); + + for ( int index =0; index < expression->getDeclaratorCount(); ++index ) + { + if ( index > 0 ) + insertText( ", " ); + + DeclaratorPtr declarator = expression->getDeclaratorAt(index); + insertText( declarator->getType()->getTypeText() ); + insertText( declarator->getName()->getIdentifier() ); + insertText( declarator->getTypeSuffix()->getTypeText() ); + } + + endInsertNewStatement(); + } } Index: CodeWriterInsertTest.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeWriterInsertTest.cpp,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** CodeWriterInsertTest.cpp 6 Apr 2003 15:11:23 -0000 1.8 --- CodeWriterInsertTest.cpp 6 Apr 2003 18:06:59 -0000 1.9 *************** *** 282,286 **** CodeModel::DeclaratorExpressionPtr declarators( new CodeModel::DeclaratorExpression( makeTypePart( "int " ) ) ); ! CodeModel::DeclaratorPtr declarator( new CodeModel::Declarator( "", "var", "[3]" ) ); declarators->appendDeclarator( declarator ); CodeModel::StatementPtr declarationStatement( new CodeModel::DeclarationStatement( declarators ) ); --- 282,288 ---- CodeModel::DeclaratorExpressionPtr declarators( new CodeModel::DeclaratorExpression( makeTypePart( "int " ) ) ); ! CodeModel::DeclaratorPtr declarator( new CodeModel::Declarator( makeTypePart(""), ! makeIdentifier("var"), ! makeTypePart("[3]") ) ); declarators->appendDeclarator( declarator ); CodeModel::StatementPtr declarationStatement( new CodeModel::DeclarationStatement( declarators ) ); *************** *** 288,291 **** --- 290,314 ---- "{\n" " int var[3];\n" + "}" ); + } + + + void + CodeWriterInsertTest::testInsertDeclarationStatementWithManyVariables() + { + CodeModel::DeclaratorExpressionPtr declarators( + new CodeModel::DeclaratorExpression( makeTypePart( "int " ) ) ); + CodeModel::DeclaratorPtr declarator( new CodeModel::Declarator( makeTypePart(""), + makeIdentifier("var"), + makeTypePart("[3]") ) ); + declarators->appendDeclarator( declarator ); + CodeModel::DeclaratorPtr declarator2( new CodeModel::Declarator( makeTypePart("*"), + makeIdentifier("var2"), + makeTypePart("[7][4]") ) ); + declarators->appendDeclarator( declarator2 ); + CodeModel::StatementPtr declarationStatement( new CodeModel::DeclarationStatement( declarators ) ); + checkGeneratedSource( declarationStatement, + "{\n" + " int var[3], *var2[7][4];\n" "}" ); } Index: CodeWriterInsertTest.h =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeWriterInsertTest.h,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** CodeWriterInsertTest.h 21 Mar 2003 07:32:26 -0000 1.5 --- CodeWriterInsertTest.h 6 Apr 2003 18:06:59 -0000 1.6 *************** *** 34,37 **** --- 34,38 ---- CPPUNIT_TEST( testInsertForStatement ); CPPUNIT_TEST( testInsertDeclarationStatement ); + CPPUNIT_TEST( testInsertDeclarationStatementWithManyVariables ); CPPUNIT_TEST_SUITE_END(); *************** *** 60,63 **** --- 61,65 ---- void testInsertForStatement(); void testInsertDeclarationStatement(); + void testInsertDeclarationStatementWithManyVariables(); private: Index: CodeWriterTestBase.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeWriterTestBase.cpp,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** CodeWriterTestBase.cpp 6 Apr 2003 15:11:23 -0000 1.6 --- CodeWriterTestBase.cpp 6 Apr 2003 18:06:59 -0000 1.7 *************** *** 88,91 **** --- 88,98 ---- + CodeModel::IdentifierPtr + CodeWriterTestBase::makeIdentifier( const std::string &identifier ) + { + return CodeModel::IdentifierPtr( new CodeModel::Identifier( identifier ) ); + } + + void CodeWriterTestBase::generateAndCheckSource( const std::string &expectedSource ) Index: CodeWriterTestBase.h =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeWriterTestBase.h,v retrieving revision 1.4 retrieving revision 1.5 diff -C2 -d -r1.4 -r1.5 *** CodeWriterTestBase.h 24 Mar 2003 07:57:51 -0000 1.4 --- CodeWriterTestBase.h 6 Apr 2003 18:06:59 -0000 1.5 *************** *** 38,41 **** --- 38,43 ---- CodeModel::TypePartPtr makeTypePart( const std::string &typePart ); + CodeModel::IdentifierPtr makeIdentifier( const std::string &identifier ); + void generateAndCheckSource( const std::string &expectedSource ); |