|
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 );
|