Update of /cvsroot/cpptool/rfta/src/rfta In directory sc8-pr-cvs1:/tmp/cvs-serv13500/src/rfta Modified Files: CodeRewriter.cpp CodeWriterTest.cpp CodeWriterTest.h IndentLevelManager.cpp IndentLevelManager.h Log Message: * added support for replacing do/while condition and iterated statement Index: CodeRewriter.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeRewriter.cpp,v retrieving revision 1.27 retrieving revision 1.28 diff -C2 -d -r1.27 -r1.28 *** CodeRewriter.cpp 16 Mar 2003 20:32:42 -0000 1.27 --- CodeRewriter.cpp 16 Mar 2003 20:57:21 -0000 1.28 *************** *** 349,360 **** CodeRewriter::visit( DoStatement &statement ) { ! beginInsertNewStatement(); ! insertText( "do" ); ! statement.getIteratedStatement()->accept( *this ); ! beginInsertNewStatement(); ! insertText( "while ( " ); ! statement.getCondition()->accept( *this ); ! insertText( " )" ); ! endInsertNewStatement(); } --- 349,385 ---- CodeRewriter::visit( DoStatement &statement ) { ! IndentLevelManager::IndentRestorer restorer( indentManager_ ); ! StatementPtr iteratedStatement = statement.getIteratedStatement(); ! if ( isInserting() ) ! { ! beginInsertNewStatement(); ! insertText( "do" ); ! indentManager_.enterNewDoStatement( iteratedStatement ); ! } ! else ! indentManager_.enterExistingDoStatement( iteratedStatement, ! statement.getSourceRange().getStartIndex() ); ! ! handleMandatoryChange( statement.getIteratedStatementChange(), ! *iteratedStatement, ! statementDelete ); ! ! restorer.restoreIndentLevel(); ! ! if ( isInserting() ) ! { ! beginInsertNewStatement(); ! insertText( "while (" ); ! } ! ! handleMandatoryChange( statement.getConditionChange(), ! *statement.getCondition(), ! bracedExpressionDelete ); ! ! if ( isInserting() ) ! { ! insertText( ")" ); ! endInsertNewStatement(); ! } } *************** *** 554,558 **** handleMandatoryChange( statement.getIteratedStatementChange(), ! *statement.getIteratedStatement(), statementDelete ); } --- 579,583 ---- handleMandatoryChange( statement.getIteratedStatementChange(), ! *iteratedStatement, statementDelete ); } Index: CodeWriterTest.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeWriterTest.cpp,v retrieving revision 1.28 retrieving revision 1.29 diff -C2 -d -r1.28 -r1.29 *** CodeWriterTest.cpp 16 Mar 2003 20:32:43 -0000 1.28 --- CodeWriterTest.cpp 16 Mar 2003 20:57:22 -0000 1.29 *************** *** 325,329 **** void ! CodeWriterTest::testModifyWhileIterationStatement() { source_ = "{\n" --- 325,329 ---- void ! CodeWriterTest::testModifyWhileIteratedStatement() { source_ = "{\n" *************** *** 339,342 **** --- 339,384 ---- " while ( true )\n" " break;\n" + "}" ); + } + + + void + CodeWriterTest::testModifyDoCondition() + { + source_ = "{\n" + " do\n" + " ;\n" + " while ( true );\n" + "}"; + generateCompound(); + + CodeModel::DoStatement &doStatement = + dynamic_cast<CodeModel::DoStatement &>( *compound_->getStatementAt(0) ); + doStatement.setCondition( makeExpression( "false" ) ); + generateAndCheckSource( "{\n" + " do\n" + " ;\n" + " while ( false );\n" + "}" ); + } + + + void + CodeWriterTest::testModifyDoIteratedStatement() + { + source_ = "{\n" + " do\n" + " ;\n" + " while ( true );\n" + "}"; + generateCompound(); + + CodeModel::DoStatement &doStatement = + dynamic_cast<CodeModel::DoStatement &>( *compound_->getStatementAt(0) ); + doStatement.setIteratedStatement( makeBreakStatement() ); + generateAndCheckSource( "{\n" + " do\n" + " break;\n" + " while ( true );\n" "}" ); } Index: CodeWriterTest.h =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeWriterTest.h,v retrieving revision 1.23 retrieving revision 1.24 diff -C2 -d -r1.23 -r1.24 *** CodeWriterTest.h 16 Mar 2003 20:32:43 -0000 1.23 --- CodeWriterTest.h 16 Mar 2003 20:57:22 -0000 1.24 *************** *** 30,34 **** CPPUNIT_TEST( testAddReturnValue ); CPPUNIT_TEST( testModifyWhileCondition ); ! CPPUNIT_TEST( testModifyWhileIterationStatement ); CPPUNIT_TEST_SUITE_END(); --- 30,36 ---- CPPUNIT_TEST( testAddReturnValue ); CPPUNIT_TEST( testModifyWhileCondition ); ! CPPUNIT_TEST( testModifyWhileIteratedStatement ); ! CPPUNIT_TEST( testModifyDoCondition ); ! CPPUNIT_TEST( testModifyDoIteratedStatement ); CPPUNIT_TEST_SUITE_END(); *************** *** 60,64 **** void testModifyWhileCondition(); ! void testModifyWhileIterationStatement(); private: --- 62,69 ---- void testModifyWhileCondition(); ! void testModifyWhileIteratedStatement(); ! ! void testModifyDoCondition(); ! void testModifyDoIteratedStatement(); private: Index: IndentLevelManager.cpp =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/IndentLevelManager.cpp,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** IndentLevelManager.cpp 16 Mar 2003 20:32:43 -0000 1.7 --- IndentLevelManager.cpp 16 Mar 2003 20:57:23 -0000 1.8 *************** *** 78,81 **** --- 78,98 ---- + void + IndentLevelManager::enterExistingDoStatement( const CodeModel::StatementPtr &subStatement, + int startingPos ) + { + if ( !isCompoundStatement( subStatement ) ) + pushIndent( findIndentLevelOf( startingPos ) + indentWidth_ ); + } + + + void + IndentLevelManager::enterNewDoStatement( const CodeModel::StatementPtr &subStatement ) + { + if ( !isCompoundStatement( subStatement ) ) + pushIndent( getIndentLevel() + indentWidth_ ); + } + + bool IndentLevelManager::isCompoundStatement( const CodeModel::StatementPtr &subStatement ) const Index: IndentLevelManager.h =================================================================== RCS file: /cvsroot/cpptool/rfta/src/rfta/IndentLevelManager.h,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** IndentLevelManager.h 16 Mar 2003 20:32:43 -0000 1.8 --- IndentLevelManager.h 16 Mar 2003 20:57:24 -0000 1.9 *************** *** 71,74 **** --- 71,79 ---- void enterNewWhileStatement( const CodeModel::StatementPtr &subStatement ); + void enterExistingDoStatement( const CodeModel::StatementPtr &subStatement, + int startingPos ); + + void enterNewDoStatement( const CodeModel::StatementPtr &subStatement ); + int getIndentLevel() const; |