You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(37) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(15) |
Feb
(26) |
Mar
(97) |
Apr
(224) |
May
(226) |
Jun
|
Jul
(3) |
Aug
(22) |
Sep
(48) |
Oct
|
Nov
|
Dec
(38) |
| 2004 |
Jan
(28) |
Feb
|
Mar
(1) |
Apr
|
May
|
Jun
(37) |
Jul
|
Aug
(73) |
Sep
|
Oct
|
Nov
|
Dec
|
|
From: <bl...@us...> - 2003-05-29 09:26:56
|
Update of /cvsroot/cpptool/rfta/resources
In directory sc8-pr-cvs1:/tmp/cvs-serv13483
Added Files:
g++-distilled-cppparserdef.txt
Log Message:
* added g++ distilled c++ grammar definition
--- NEW FILE: g++-distilled-cppparserdef.txt ---
program:
/* empty */
| extdefs
;
extdefs:
lang_extdef
| extdefs lang_extdef
;
extdefs_opt:
extdefs
| /* empty */
;
.hush_warning:
;
.warning_ok:
;
[...1936 lines suppressed...]
| operator POINTSAT unoperator %prec EMPTY
| operator POINTSAT_STAR unoperator %prec EMPTY
| operator LEFT_RIGHT unoperator
| operator '[' ']' unoperator
| operator NEW unoperator %prec EMPTY
| operator DELETE unoperator %prec EMPTY
| operator NEW '[' ']' unoperator
| operator DELETE '[' ']' unoperator
| operator type_specifier_seq conversion_declarator unoperator
| operator error unoperator
;
/* The forced readahead in here is because we might be at the end of a
line, and lineno won't be bumped until yylex absorbs the first token
on the next line. */
save_lineno:
{ if (yychar == YYEMPTY)
yychar = YYLEX;
$$ = lineno; }
;
|
|
From: <bl...@us...> - 2003-05-29 09:19:56
|
Update of /cvsroot/cpptool/rfta/resources In directory sc8-pr-cvs1:/tmp/cvs-serv10806/resources Log Message: Directory /cvsroot/cpptool/rfta/resources added to the repository |
|
From: <bl...@us...> - 2003-05-28 20:47:32
|
Update of /cvsroot/cpptool/rfta/src/pyrfta
In directory sc8-pr-cvs1:/tmp/cvs-serv10010/src/pyrfta
Modified Files:
ExposeCPPParser.cpp ExposeStatements.cpp Forwards.h pyrfta.cpp
pyrfta.dsp
Log Message:
* exposed code model declaration and parser
Index: ExposeCPPParser.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/pyrfta/ExposeCPPParser.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** ExposeCPPParser.cpp 27 Apr 2003 13:00:52 -0000 1.1
--- ExposeCPPParser.cpp 28 May 2003 20:47:27 -0000 1.2
***************
*** 4,7 ****
--- 4,8 ----
#include <rfta/parser/ASTNodePropertyVisitor.h>
#include <rfta/parser/ASTNodeVisitor.h>
+ #include <rfta/refactoring/CodeModelParser.h>
using namespace boost::python;
***************
*** 51,54 ****
--- 52,59 ----
exposeCPPParser()
{
+ class_<CodeModel::Parser>( "Parser", init<std::string>() )
+ .def( "getFunctionAt", &CodeModel::Parser::getFunctionAt )
+ ;
+
class_<CPPParser>( "CPPParser", init<std::string>() )
.def( "parseAll", &CPPParser::parseAll )
Index: ExposeStatements.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/pyrfta/ExposeStatements.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** ExposeStatements.cpp 30 Apr 2003 08:06:29 -0000 1.4
--- ExposeStatements.cpp 28 May 2003 20:47:27 -0000 1.5
***************
*** 14,18 ****
void (Statement::*mfAcceptStatementVisitor)( StatementVisitor & ) = &Statement::accept;
! class_<Statement, bases<Element>, boost::noncopyable >( "Statement", no_init )
.def( "accept", mfAcceptStatementVisitor )
;
--- 14,18 ----
void (Statement::*mfAcceptStatementVisitor)( StatementVisitor & ) = &Statement::accept;
! class_<Statement, StatementPtr, bases<Element>, boost::noncopyable >( "Statement", no_init )
.def( "accept", mfAcceptStatementVisitor )
;
Index: Forwards.h
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/pyrfta/Forwards.h,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** Forwards.h 27 Apr 2003 13:00:53 -0000 1.3
--- Forwards.h 28 May 2003 20:47:27 -0000 1.4
***************
*** 11,14 ****
--- 11,15 ----
void exposeExpressions();
void exposeExpressions2();
+ void exposeDeclarations();
Index: pyrfta.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/pyrfta/pyrfta.cpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -C2 -d -r1.6 -r1.7
*** pyrfta.cpp 27 Apr 2003 13:00:53 -0000 1.6
--- pyrfta.cpp 28 May 2003 20:47:27 -0000 1.7
***************
*** 102,105 ****
--- 102,106 ----
exposeExpressions();
exposeExpressions2();
+ exposeDeclarations();
class_<B, boost::shared_ptr<B> >( "B", init<int>() )
Index: pyrfta.dsp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/pyrfta/pyrfta.dsp,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** pyrfta.dsp 16 May 2003 19:55:01 -0000 1.7
--- pyrfta.dsp 28 May 2003 20:47:27 -0000 1.8
***************
*** 124,127 ****
--- 124,131 ----
# Begin Source File
+ SOURCE=.\ExposeDeclarations.cpp
+ # End Source File
+ # Begin Source File
+
SOURCE=..\..\include\xtl\python\ExposeEnumerator.h
# End Source File
|
|
From: <bl...@us...> - 2003-05-28 20:47:03
|
Update of /cvsroot/cpptool/rfta/include/rfta/refactoring
In directory sc8-pr-cvs1:/tmp/cvs-serv9780/include/rfta/refactoring
Modified Files:
CodeModelDeclarations.h
Log Message:
* added class File
Index: CodeModelDeclarations.h
===================================================================
RCS file: /cvsroot/cpptool/rfta/include/rfta/refactoring/CodeModelDeclarations.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** CodeModelDeclarations.h 28 May 2003 07:33:54 -0000 1.1
--- CodeModelDeclarations.h 28 May 2003 20:46:58 -0000 1.2
***************
*** 10,13 ****
--- 10,14 ----
#include <rfta/refactoring/CodeModelElement.h>
#include <boost/shared_ptr.hpp>
+ #include <xtl/Enumerator.h>
#include <string>
#include <vector>
***************
*** 158,169 ****
{
public:
FunctionDeclaration( const TypePtr &returnType,
const FunctionNamePtr &functionName,
const ParametersPtr ¶meters );
FunctionDeclaration( const TypePtr &returnType,
const FunctionNamePtr &functionName,
const ParametersPtr ¶meters,
! const CompoundStatementPtr &body );
FunctionNamePtr getFunctionName() const;
--- 159,172 ----
{
public:
+ /*
FunctionDeclaration( const TypePtr &returnType,
const FunctionNamePtr &functionName,
const ParametersPtr ¶meters );
+ */
FunctionDeclaration( const TypePtr &returnType,
const FunctionNamePtr &functionName,
const ParametersPtr ¶meters,
! const CompoundStatementPtr &body = CompoundStatementPtr() );
FunctionNamePtr getFunctionName() const;
***************
*** 180,183 ****
--- 183,197 ----
};
+
+ class RFTA_API File : public Element
+ {
+ public:
+ void appendDeclaration( const ElementPtr &declaration );
+
+ Xtl::Enumerator<ElementPtr> getDeclarations() const;
+
+ private:
+ std::vector<ElementPtr> declarations_;
+ };
|
|
From: <bl...@us...> - 2003-05-28 20:47:02
|
Update of /cvsroot/cpptool/rfta/src/rfta
In directory sc8-pr-cvs1:/tmp/cvs-serv9780/src/rfta
Modified Files:
CodeModelDeclarations.cpp
Log Message:
* added class File
Index: CodeModelDeclarations.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeModelDeclarations.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** CodeModelDeclarations.cpp 28 May 2003 07:33:53 -0000 1.1
--- CodeModelDeclarations.cpp 28 May 2003 20:46:58 -0000 1.2
***************
*** 6,9 ****
--- 6,10 ----
#include "stdafx.h"
#include <rfta/refactoring/CodeModelDeclarations.h>
+ #include <xtl/StlEnumerator.h>
namespace Refactoring { namespace CodeModel {
***************
*** 45,49 ****
}
!
FunctionDeclaration::FunctionDeclaration( const TypePtr &returnType,
const FunctionNamePtr &functionName,
--- 46,50 ----
}
! /*
FunctionDeclaration::FunctionDeclaration( const TypePtr &returnType,
const FunctionNamePtr &functionName,
***************
*** 54,58 ****
{
}
!
FunctionDeclaration::FunctionDeclaration( const TypePtr &returnType,
--- 55,59 ----
{
}
! */
FunctionDeclaration::FunctionDeclaration( const TypePtr &returnType,
***************
*** 89,92 ****
--- 90,110 ----
+
+
+ void
+ File::appendDeclaration( const ElementPtr &declaration )
+ {
+ declarations_.push_back( declaration );
+ }
+
+
+ Xtl::Enumerator<ElementPtr>
+ File::getDeclarations() const
+ {
+ return Xtl::enumStl( declarations_ );
+ }
+
+
} // namespace CodeModel
} // namespace Refactoring
+
|
|
From: <bl...@us...> - 2003-05-28 20:46:43
|
Update of /cvsroot/cpptool/rfta/src/rfta
In directory sc8-pr-cvs1:/tmp/cvs-serv9613/src/rfta
Modified Files:
CodeModelParser.cpp CodeModelParserTest.cpp
Log Message:
* renamed getFunctionBodyAt() to getFunctionAt()
Index: CodeModelParser.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeModelParser.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** CodeModelParser.cpp 28 May 2003 07:36:21 -0000 1.1
--- CodeModelParser.cpp 28 May 2003 20:46:38 -0000 1.2
***************
*** 17,21 ****
FunctionDeclarationPtr
! Parser::getFunctionBodyAt( int position )
{
ASTNodePtr functionNode = parser_.parseForFunctionBodyAt( position );
--- 17,21 ----
FunctionDeclarationPtr
! Parser::getFunctionAt( int position )
{
ASTNodePtr functionNode = parser_.parseForFunctionBodyAt( position );
Index: CodeModelParserTest.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeModelParserTest.cpp,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** CodeModelParserTest.cpp 28 May 2003 07:36:21 -0000 1.1
--- CodeModelParserTest.cpp 28 May 2003 20:46:38 -0000 1.2
***************
*** 49,53 ****
CodeModel::Parser parser( source_ );
! CodeModel::FunctionDeclarationPtr function = parser.getFunctionBodyAt( builder_->getStartIndex( "FN" ) );
CodeModel::FunctionNamePtr functionName = function->getFunctionName();
std::string name = functionName->getName();
--- 49,53 ----
CodeModel::Parser parser( source_ );
! CodeModel::FunctionDeclarationPtr function = parser.getFunctionAt( builder_->getStartIndex( "FN" ) );
CodeModel::FunctionNamePtr functionName = function->getFunctionName();
std::string name = functionName->getName();
|
|
From: <bl...@us...> - 2003-05-28 20:46:43
|
Update of /cvsroot/cpptool/rfta/include/rfta/refactoring
In directory sc8-pr-cvs1:/tmp/cvs-serv9613/include/rfta/refactoring
Modified Files:
CodeModelParser.h
Log Message:
* renamed getFunctionBodyAt() to getFunctionAt()
Index: CodeModelParser.h
===================================================================
RCS file: /cvsroot/cpptool/rfta/include/rfta/refactoring/CodeModelParser.h,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** CodeModelParser.h 28 May 2003 07:36:21 -0000 1.1
--- CodeModelParser.h 28 May 2003 20:46:39 -0000 1.2
***************
*** 21,25 ****
* \exception ParserError is throw if a failure occurs during parsing.
*/
! FunctionDeclarationPtr getFunctionBodyAt( int position );
private:
--- 21,25 ----
* \exception ParserError is throw if a failure occurs during parsing.
*/
! FunctionDeclarationPtr getFunctionAt( int position );
private:
|
|
From: <bl...@us...> - 2003-05-28 07:36:25
|
Update of /cvsroot/cpptool/rfta/src/rfta
In directory sc8-pr-cvs1:/tmp/cvs-serv19238/src/rfta
Modified Files:
rfta.dsp
Added Files:
CodeModelParser.cpp CodeModelParserTest.cpp
CodeModelParserTest.h
Log Message:
* added CodeModelParser, similar to CPPParser but returns CodeModel object instead of ASTNode.
--- NEW FILE: CodeModelParser.cpp ---
#include "stdafx.h"
#include <rfta/refactoring/CodeModelParser.h>
#include <rfta/refactoring/CodeModelGenerator.h>
#include <rfta/refactoring/CodeModelDeclarations.h>
namespace Refactoring { namespace CodeModel
{
Parser::Parser( const std::string &source )
: parser_( source )
{
}
FunctionDeclarationPtr
Parser::getFunctionBodyAt( int position )
{
ASTNodePtr functionNode = parser_.parseForFunctionBodyAt( position );
if ( !functionNode )
return FunctionDeclarationPtr();
Generator generator;
return generator.generateFunctionDeclaration( functionNode );
}
}} // namespace Refactoring { namespace CodeModel
--- NEW FILE: CodeModelParserTest.cpp ---
// //////////////////////////////////////////////////////////////////////////
// (c)Copyright 2002, Baptiste Lepilleur.
// Created: 2003/05/27
// //////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CodeModelParserTest.h"
#include <rfta/refactoring/CodeModelParser.h>
#include <rfta/refactoring/CodeModelDeclarations.h>
#include <rfta/refactoring/CodeModelStatements.h>
namespace Refactoring
{
RFTA_TEST_SUITE_REGISTRATION( CodeModelParserTest );
CodeModelParserTest::CodeModelParserTest()
{
}
CodeModelParserTest::~CodeModelParserTest()
{
}
void
CodeModelParserTest::setUp()
{
SourceBasedTestBase::setUp();
}
void
CodeModelParserTest::tearDown()
{
SourceBasedTestBase::tearDown();
}
void
CodeModelParserTest::testGetFunctionAt()
{
source_ = "void function() { ";
builder_->addKeyingMid( "", "return", ";", "FN" );
source_ += "}";
CodeModel::Parser parser( source_ );
CodeModel::FunctionDeclarationPtr function = parser.getFunctionBodyAt( builder_->getStartIndex( "FN" ) );
CodeModel::FunctionNamePtr functionName = function->getFunctionName();
std::string name = functionName->getName();
RFTA_ASSERT_EQUAL( "void function() ", name ); // because of incomplete parsing, should be 'function'.
CodeModel::CompoundStatementPtr compound = function->getBody();
CPPUNIT_ASSERT( compound );
RFTA_ASSERT_EQUAL( 1, compound->getStatementCount() );
CodeModel::StatementPtr statement = compound->getStatementAt(0);
CPPUNIT_ASSERT( boost::dynamic_pointer_cast<CodeModel::ReturnStatement>(statement) );
}
} // namespace Refactoring
--- NEW FILE: CodeModelParserTest.h ---
// //////////////////////////////////////////////////////////////////////////
// (c)Copyright 2002, Baptiste Lepilleur.
// Created: 2003/05/27
// //////////////////////////////////////////////////////////////////////////
#ifndef RFTA_CODEMODELPARSERTEST_H
#define RFTA_CODEMODELPARSERTEST_H
#include "SourceBasedTestBase.h"
namespace Refactoring
{
/// Unit tests for CodeModelParserTest
class CodeModelParserTest : public SourceBasedTestBase
{
CPPUNIT_TEST_SUITE( CodeModelParserTest );
CPPUNIT_TEST( testGetFunctionAt );
CPPUNIT_TEST_SUITE_END();
public:
/*! Constructs a CodeModelParserTest object.
*/
CodeModelParserTest();
/// Destructor.
virtual ~CodeModelParserTest();
void setUp();
void tearDown();
void testGetFunctionAt();
private:
/// Prevents the use of the copy constructor.
CodeModelParserTest( const CodeModelParserTest &other );
/// Prevents the use of the copy operator.
void operator =( const CodeModelParserTest &other );
private:
};
// Inlines methods for CodeModelParserTest:
// ----------------------------------------
} // namespace Refactoring
#endif // RFTA_CODEMODELPARSERTEST_H
Index: rfta.dsp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/rfta.dsp,v
retrieving revision 1.49
retrieving revision 1.50
diff -C2 -d -r1.49 -r1.50
*** rfta.dsp 26 May 2003 21:12:33 -0000 1.49
--- rfta.dsp 28 May 2003 07:36:21 -0000 1.50
***************
*** 335,338 ****
--- 335,346 ----
# Begin Source File
+ SOURCE=.\CodeModelDeclarations.cpp
+ # End Source File
+ # Begin Source File
+
+ SOURCE=..\..\include\rfta\refactoring\CodeModelDeclarations.h
+ # End Source File
+ # Begin Source File
+
SOURCE=.\CodeModelElement.cpp
# End Source File
***************
*** 363,366 ****
--- 371,382 ----
# Begin Source File
+ SOURCE=.\CodeModelParser.cpp
+ # End Source File
+ # Begin Source File
+
+ SOURCE=..\..\include\rfta\refactoring\CodeModelParser.h
+ # End Source File
+ # Begin Source File
+
SOURCE=.\CodeModelStatements.cpp
# End Source File
***************
*** 996,999 ****
--- 1012,1023 ----
!ENDIF
+ # End Source File
+ # Begin Source File
+
+ SOURCE=.\CodeModelParserTest.cpp
+ # End Source File
+ # Begin Source File
+
+ SOURCE=.\CodeModelParserTest.h
# End Source File
# Begin Source File
|
|
From: <bl...@us...> - 2003-05-28 07:36:25
|
Update of /cvsroot/cpptool/rfta/include/rfta/refactoring
In directory sc8-pr-cvs1:/tmp/cvs-serv19238/include/rfta/refactoring
Added Files:
CodeModelParser.h
Log Message:
* added CodeModelParser, similar to CPPParser but returns CodeModel object instead of ASTNode.
--- NEW FILE: CodeModelParser.h ---
#ifndef RFTA_CODEMODELPARSER_H_INCLUDED
#define RFTA_CODEMODELPARSER_H_INCLUDED
#include <rfta/refactoring/Config.h>
#include <rfta/parser/CPPParser.h>
#include <rfta/refactoring/CodeModelForward.h>
namespace Refactoring { namespace CodeModel
{
class RFTA_API Parser
{
public:
Parser( const std::string &source );
/*! Returns the function body which contains the specified location.
* \return Compound statement if a function body is found including
* the specified location, 0 otherwise.
* \exception ParserError is throw if a failure occurs during parsing.
*/
FunctionDeclarationPtr getFunctionBodyAt( int position );
private:
CPPParser parser_;
};
}} // namespace Refactoring { namespace CodeModel
#endif // RFTA_CODEMODELPARSER_H_INCLUDED
|
|
From: <bl...@us...> - 2003-05-28 07:34:57
|
Update of /cvsroot/cpptool/rfta/include/rfta/refactoring
In directory sc8-pr-cvs1:/tmp/cvs-serv18423/include/rfta/refactoring
Modified Files:
CodeModelElement.h CodeModelExpressions.h
Log Message:
* introduced TextElement base class for simple text holder element
* refactored some to use TextElement
Index: CodeModelElement.h
===================================================================
RCS file: /cvsroot/cpptool/rfta/include/rfta/refactoring/CodeModelElement.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** CodeModelElement.h 26 May 2003 21:12:33 -0000 1.15
--- CodeModelElement.h 28 May 2003 07:34:54 -0000 1.16
***************
*** 73,76 ****
--- 73,90 ----
+ class RFTA_API TextElement : public Element
+ {
+ public:
+ TextElement( const std::string &text );
+
+ protected:
+ std::string getElementText() const;
+
+ private:
+ std::string text_;
+ };
+
+
+
} // namespace CodeModel
Index: CodeModelExpressions.h
===================================================================
RCS file: /cvsroot/cpptool/rfta/include/rfta/refactoring/CodeModelExpressions.h,v
retrieving revision 1.16
retrieving revision 1.17
diff -C2 -d -r1.16 -r1.17
*** CodeModelExpressions.h 10 Apr 2003 08:37:47 -0000 1.16
--- CodeModelExpressions.h 28 May 2003 07:34:54 -0000 1.17
***************
*** 51,55 ****
! class RFTA_API TypePart : public Element
{
public:
--- 51,55 ----
! class RFTA_API TypePart : public TextElement
{
public:
***************
*** 60,66 ****
// overridden from Element
void accept( ElementVisitor &visitor );
-
- private:
- std::string typePart_;
};
--- 60,63 ----
|
|
From: <bl...@us...> - 2003-05-28 07:34:57
|
Update of /cvsroot/cpptool/rfta/src/rfta
In directory sc8-pr-cvs1:/tmp/cvs-serv18423/src/rfta
Modified Files:
CodeModelElement.cpp CodeModelExpressions.cpp
Log Message:
* introduced TextElement base class for simple text holder element
* refactored some to use TextElement
Index: CodeModelElement.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeModelElement.cpp,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -d -r1.12 -r1.13
*** CodeModelElement.cpp 26 May 2003 21:12:33 -0000 1.12
--- CodeModelElement.cpp 28 May 2003 07:34:53 -0000 1.13
***************
*** 68,71 ****
--- 68,89 ----
+
+
+ TextElement::TextElement( const std::string &text )
+ : text_( text )
+ {
+ }
+
+
+ std::string
+ TextElement::getElementText() const
+ {
+ if ( isFromSource() )
+ return getSourceText();
+ return text_;
+ }
+
+
+
} // namespace CodeModel
} // namespace Refactoring
Index: CodeModelExpressions.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeModelExpressions.cpp,v
retrieving revision 1.16
retrieving revision 1.17
diff -C2 -d -r1.16 -r1.17
*** CodeModelExpressions.cpp 22 Apr 2003 19:17:00 -0000 1.16
--- CodeModelExpressions.cpp 28 May 2003 07:34:53 -0000 1.17
***************
*** 174,178 ****
TypePart::TypePart( const std::string &typePart )
! : typePart_( typePart )
{
}
--- 174,178 ----
TypePart::TypePart( const std::string &typePart )
! : TextElement( typePart )
{
}
***************
*** 182,188 ****
TypePart::getTypeText() const
{
! if ( isFromSource() )
! return getSourceText();
! return typePart_;
}
--- 182,186 ----
TypePart::getTypeText() const
{
! return TextElement::getElementText();
}
|
|
From: <bl...@us...> - 2003-05-28 07:33:57
|
Update of /cvsroot/cpptool/rfta/include/rfta/refactoring
In directory sc8-pr-cvs1:/tmp/cvs-serv17902/include/rfta/refactoring
Modified Files:
CodeModelForward.h
Added Files:
CodeModelDeclarations.h
Log Message:
* added very rough support for function declaration
--- NEW FILE: CodeModelDeclarations.h ---
// //////////////////////////////////////////////////////////////////////////
// (c)Copyright 2002, Baptiste Lepilleur.
// Created: 2003/05/27
// //////////////////////////////////////////////////////////////////////////
#ifndef RFTA_CODEMODELDECLARATIONS_H
#define RFTA_CODEMODELDECLARATIONS_H
#include <rfta/refactoring/ChangeTrackers.h>
#include <rfta/refactoring/CodeModelForward.h>
#include <rfta/refactoring/CodeModelElement.h>
#include <boost/shared_ptr.hpp>
#include <string>
#include <vector>
namespace Refactoring { namespace CodeModel {
class DeclarationVisitor;
class RFTA_API Declaration : public Element
{
public:
virtual ~Declaration();
void accept( ElementVisitor &visitor );
virtual void accept( DeclarationVisitor &visitor ) =0;
};
class RFTA_API Type : public TextElement
{
public:
Type( const std::string &type )
: TextElement( type )
{
}
std::string getTypeText() const
{
return TextElement::getElementText();
}
// overridden from Element
void accept( ElementVisitor &visitor );
};
class RFTA_API ArrayTypeSuffix : public TextElement
{
public:
ArrayTypeSuffix( const std::string &type )
: TextElement( type )
{
}
std::string getSuffixText() const
{
return TextElement::getElementText();
}
// overridden from Element
void accept( ElementVisitor &visitor );
};
class RFTA_API VariableName : public TextElement
{
public:
VariableName( const std::string &name )
: TextElement( name )
{
}
std::string getName() const
{
return TextElement::getElementText();
}
// overridden from Element
void accept( ElementVisitor &visitor );
};
class RFTA_API Parameter : public Element
{
public:
Parameter( const TypePtr &type,
const VariableNamePtr &name,
const ArrayTypeSuffixPtr &typeSuffix );
Parameter( const TypePtr &type,
const VariableNamePtr &name,
const ArrayTypeSuffixPtr &typeSuffix,
const AssignInitializerExpressionPtr &initializer );
private:
TypePtr type_;
VariableNamePtr name_;
ArrayTypeSuffixPtr typeSuffix_;
AssignInitializerExpressionPtr initializer_;
};
class RFTA_API Parameters : public Element
{
public:
void appendParameter( const ParameterPtr ¶meter );
private:
};
class RFTA_API FunctionName : public TextElement
{
public:
FunctionName( const std::string &name )
: TextElement( name )
{
}
std::string getName() const
{
return TextElement::getElementText();
}
// overridden from Element
void accept( ElementVisitor &visitor );
};
/*
class RFTA_API Modifier : public TextElement
{
public:
Modifier( const std::string &name )
: TextElement( name )
{
}
std::string getName() const
{
return TextElement::getElementText();
}
// overridden from Element
void accept( ElementVisitor &visitor );
};
class RFTA_API Modifiers : public Element
{
public:
};
*/
class RFTA_API FunctionDeclaration : public Element
{
public:
FunctionDeclaration( const TypePtr &returnType,
const FunctionNamePtr &functionName,
const ParametersPtr ¶meters );
FunctionDeclaration( const TypePtr &returnType,
const FunctionNamePtr &functionName,
const ParametersPtr ¶meters,
const CompoundStatementPtr &body );
FunctionNamePtr getFunctionName() const;
bool hasBody() const;
CompoundStatementPtr getBody() const;
private:
TypePtr returnType_;
FunctionNamePtr functionName_;
ParametersPtr parameters_;
CompoundStatementPtr body_;
};
} // namespace CodeModel
} // namespace Refactoring
#endif // RFTA_CODEMODELDECLARATIONS_H
Index: CodeModelForward.h
===================================================================
RCS file: /cvsroot/cpptool/rfta/include/rfta/refactoring/CodeModelForward.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** CodeModelForward.h 26 May 2003 21:12:33 -0000 1.15
--- CodeModelForward.h 28 May 2003 07:33:54 -0000 1.16
***************
*** 18,21 ****
--- 18,30 ----
class Identifier;
+ class Declaration;
+ class Type;
+ class ArrayTypeSuffix;
+ class VariableName;
+ class Parameter;
+ class Parameters;
+ class FunctionName;
+ class FunctionDeclaration;
+
class BreakStatement;
class CaseStatement;
***************
*** 68,71 ****
--- 77,88 ----
typedef boost::shared_ptr<WhileStatement> WhileStatementPtr;
+ typedef boost::shared_ptr<Declaration> DeclarationPtr;
+ typedef boost::shared_ptr<Type> TypePtr;
+ typedef boost::shared_ptr<ArrayTypeSuffix> ArrayTypeSuffixPtr;
+ typedef boost::shared_ptr<VariableName> VariableNamePtr;
+ typedef boost::shared_ptr<Parameter> ParameterPtr;
+ typedef boost::shared_ptr<Parameters> ParametersPtr;
+ typedef boost::shared_ptr<FunctionName> FunctionNamePtr;
+ typedef boost::shared_ptr<FunctionDeclaration> FunctionDeclarationPtr;
typedef boost::shared_ptr<Element> ElementPtr;
|
|
From: <bl...@us...> - 2003-05-28 07:33:56
|
Update of /cvsroot/cpptool/rfta/src/rfta
In directory sc8-pr-cvs1:/tmp/cvs-serv17902/src/rfta
Added Files:
CodeModelDeclarations.cpp
Log Message:
* added very rough support for function declaration
--- NEW FILE: CodeModelDeclarations.cpp ---
// //////////////////////////////////////////////////////////////////////////
// (c)Copyright 2002, Baptiste Lepilleur.
// Created: 2003/05/27
// //////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include <rfta/refactoring/CodeModelDeclarations.h>
namespace Refactoring { namespace CodeModel {
Declaration::~Declaration()
{
}
void
Declaration::accept( ElementVisitor &visitor )
{
}
void
Type::accept( ElementVisitor &visitor )
{
}
void
ArrayTypeSuffix::accept( ElementVisitor &visitor )
{
}
void
VariableName::accept( ElementVisitor &visitor )
{
}
void
FunctionName::accept( ElementVisitor &visitor )
{
}
FunctionDeclaration::FunctionDeclaration( const TypePtr &returnType,
const FunctionNamePtr &functionName,
const ParametersPtr ¶meters )
: returnType_( returnType )
, functionName_( functionName )
, parameters_( parameters )
{
}
FunctionDeclaration::FunctionDeclaration( const TypePtr &returnType,
const FunctionNamePtr &functionName,
const ParametersPtr ¶meters,
const CompoundStatementPtr &body )
: returnType_( returnType )
, functionName_( functionName )
, parameters_( parameters )
, body_( body )
{
}
FunctionNamePtr
FunctionDeclaration::getFunctionName() const
{
return functionName_;
}
bool
FunctionDeclaration::hasBody() const
{
return body_;
}
CompoundStatementPtr
FunctionDeclaration::getBody() const
{
return body_;
}
} // namespace CodeModel
} // namespace Refactoring
|
|
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
|
|
From: <bl...@us...> - 2003-05-28 07:32:51
|
Update of /cvsroot/cpptool/rfta/src/rfta
In directory sc8-pr-cvs1:/tmp/cvs-serv17275/src/rfta
Added Files:
CodeModelGenerator.cpp
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.cpp ---
// //////////////////////////////////////////////////////////////////////////
// (c)Copyright 2002, Baptiste Lepilleur.
// Created: 2002/12/21
// //////////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include <rfta/refactoring/CodeModelGenerator.h>
#include <rfta/parser/ASTNode.h>
#include <rfta/parser/ASTNodes.h>
#include <rfta/refactoring/CodeModelExpressions.h>
#include <rfta/refactoring/CodeModelStatements.h>
#include <rfta/refactoring/CodeModelDeclarations.h>
namespace {
class ASTNNodeElementASTSource : public Refactoring::CodeModel::ElementASTSource
{
public:
ASTNNodeElementASTSource( const Refactoring::ASTNodePtr &node )
: node_( node )
{
}
Refactoring::SourceRange getSourceRange() const
{
return node_->getRange();
}
std::string getSourceText() const
{
return node_->getOriginalText();
}
private:
Refactoring::ASTNodePtr node_;
};
}
namespace Refactoring { namespace CodeModel {
GeneratorError::GeneratorError( const std::string &message )
: std::logic_error( message )
{
}
GeneratorError::~GeneratorError() throw()
{
}
Generator::Generator()
{
addStatement( ASTNodeTypes::breakStatement,
&Generator::generateBreakStatement );
addStatement( ASTNodeTypes::caseStatement,
&Generator::generateCaseStatement );
addStatement( ASTNodeTypes::compoundStatement,
&Generator::generateCompoundStatement );
addStatement( ASTNodeTypes::declarationExpression,
&Generator::generateDeclarationStatement );
addStatement( ASTNodeTypes::defaultStatement,
&Generator::generateDefaultStatement );
addStatement( ASTNodeTypes::doWhileStatement,
&Generator::generateDoStatement );
addStatement( ASTNodeTypes::expression,
&Generator::generateExpressionStatement );
addStatement( ASTNodeTypes::forStatement,
&Generator::generateForStatement );
// addStatement( ASTNodeTypes::gotoStatement,
// &Generator::generateGotoStatement );
addStatement( ASTNodeTypes::selectionStatement,
&Generator::generateIfStatement );
// addStatement( ASTNodeTypes::labelStatement,
// &Generator::generateLabelStatement );
addStatement( ASTNodeTypes::nullStatement,
&Generator::generateNullStatement );
addStatement( ASTNodeTypes::returnStatement,
&Generator::generateReturnStatement );
addStatement( ASTNodeTypes::switchStatement,
&Generator::generateSwitchStatement );
addStatement( ASTNodeTypes::whileStatement,
&Generator::generateWhileStatement );
}
Generator::~Generator()
{
}
FunctionDeclarationPtr
Generator::generateFunctionDeclaration( const ASTNodePtr &functionDeclNode )
{
ASTNodePtr headerNode = functionDeclNode->getProperty( ASTNodeProperties::functionHeaderProperty );
if ( !headerNode )
throw std::invalid_argument( "Generator::generateFunctionDeclaration, functionDeclNode is not a function declaration node" );
ASTNodePtr bodyNode = functionDeclNode->getProperty( ASTNodeProperties::functionBodyProperty );
TypePtr returnType( new Type("") );
FunctionNamePtr name( new FunctionName( headerNode->getOriginalText() ) );
setElementSource( *name, headerNode );
ParametersPtr parameters( new Parameters() );
CompoundStatementPtr body;
if ( bodyNode )
body = generateCompound( bodyNode );
return FunctionDeclarationPtr( new FunctionDeclaration( returnType, name, parameters, body ) );
}
CompoundStatementPtr
Generator::generateCompound( const ASTNodePtr &compoundNode )
{
CompoundStatementPtr compound( new CompoundStatement() );
for ( int index = 0; index < compoundNode->getChildCount(); ++index )
{
StatementPtr statement =
generateStatement( compoundNode->getChildAt( index ) );
compound->appendStatement( statement );
}
setElementSource( *compound, compoundNode );
return compound;
}
StatementPtr
Generator::generateStatement( const ASTNodePtr &statementNode )
{
Generators::iterator it = statementGenerators_.find( statementNode->getType() );
if ( it == statementGenerators_.end() )
{
throw GeneratorError(
"Generator::generateStatement(): node type is not a statement"
+ statementNode->getType().getName() );
}
GeneratorFunction function = it->second;
StatementPtr statement = (this->*function)( statementNode );
setElementSource( *statement, statementNode );
return statement;
}
void
Generator::addStatement( const ASTNodeType &type,
GeneratorFunction function )
{
statementGenerators_.insert( Generators::value_type( type, function ) );
}
StatementPtr
Generator::generateBreakStatement( const ASTNodePtr &statement )
{
return StatementPtr( new BreakStatement() );
}
StatementPtr
Generator::generateCaseStatement( const ASTNodePtr &statement )
{
ASTNodePtr conditionValueNode =
statement->getProperty( ASTNodeProperties::constantValueProperty );
ExpressionPtr conditionValue = generateExpression( conditionValueNode );
return StatementPtr( new CaseStatement( conditionValue ) );
}
StatementPtr
Generator::generateCompoundStatement( const ASTNodePtr &statement )
{
return generateCompound( statement );
}
StatementPtr
Generator::generateDeclarationStatement( const ASTNodePtr &statement )
{
DeclaratorExpressionPtr declarator =
generateDeclarator( statement );
return StatementPtr( new DeclarationStatement( declarator ) );
}
StatementPtr
Generator::generateDefaultStatement( const ASTNodePtr &statement )
{
return StatementPtr( new DefaultStatement() );
}
StatementPtr
Generator::generateDoStatement( const ASTNodePtr &statement )
{
ASTNodePtr conditionNode =
statement->getProperty( ASTNodeProperties::iterationProperty );
ASTNodePtr iteratedNode =
statement->getProperty( ASTNodeProperties::iterationStatementProperty );
ExpressionPtr condition = generateExpression( conditionNode );
StatementPtr iterated = generateStatement( iteratedNode );
return StatementPtr( new DoStatement( condition, iterated ) );
}
StatementPtr
Generator::generateExpressionStatement( const ASTNodePtr &statement )
{
ExpressionPtr expression = generateExpression( statement );
return StatementPtr( new ExpressionStatement( expression ) );
}
StatementPtr
Generator::generateForStatement( const ASTNodePtr &statement )
{
ASTNodePtr iteratedNode =
statement->getProperty( ASTNodeProperties::iterationStatementProperty );
StatementPtr iterated = generateStatement( iteratedNode );
ASTNodePtr forIterationNode =
statement->getProperty( ASTNodeProperties::iterationProperty );
ASTNodePtr declarationNode =
forIterationNode->getProperty( ASTNodeProperties::declarationProperty );
ExpressionPtr declaration = generateExpression( declarationNode );
ASTNodePtr conditionNode =
forIterationNode->getProperty( ASTNodeProperties::conditionProperty );
ExpressionPtr condition = generateExpression( conditionNode );
ASTNodePtr iterationNode =
forIterationNode->getProperty( ASTNodeProperties::nextStepProperty );
ExpressionPtr iteration = generateExpression( iterationNode );
return StatementPtr( new ForStatement( declaration,
condition,
iteration,
iterated ) );
}
StatementPtr
Generator::generateIfStatement( const ASTNodePtr &statement )
{
ASTNodePtr conditionNode =
statement->getProperty( ASTNodeProperties::selectionProperty );
ASTNodePtr thenStatementNode =
statement->getProperty( ASTNodeProperties::thenStatementProperty );
ASTNodePtr elseStatementNode =
statement->getProperty( ASTNodeProperties::elseStatementProperty );
ExpressionPtr condition = generateExpression( conditionNode );
StatementPtr thenStatement = generateStatement( thenStatementNode );
if ( !elseStatementNode )
return StatementPtr( new IfStatement( condition, thenStatement ) );
StatementPtr elseStatement = generateStatement( elseStatementNode );
return StatementPtr( new IfStatement( condition, thenStatement, elseStatement ) );
}
StatementPtr
Generator::generateNullStatement( const ASTNodePtr &statement )
{
return StatementPtr( new NullStatement() );
}
StatementPtr
Generator::generateReturnStatement( const ASTNodePtr &statement )
{
ASTNodePtr valueNode = statement->getProperty( ASTNodeProperties::valueProperty );
if ( !valueNode )
return StatementPtr( new ReturnStatement() );
ExpressionPtr value = generateExpression( valueNode );
return StatementPtr( new ReturnStatement( value ) );
}
StatementPtr
Generator::generateSwitchStatement( const ASTNodePtr &statement )
{
ASTNodePtr conditionNode =
statement->getProperty( ASTNodeProperties::selectionProperty );
ASTNodePtr statementsNode =
statement->getProperty( ASTNodeProperties::switchStatementProperty );
ExpressionPtr condition = generateExpression( conditionNode );
CompoundStatementPtr statements = generateCompound( statementsNode );
return StatementPtr( new SwitchStatement( condition, statements ) );
}
StatementPtr
Generator::generateWhileStatement( const ASTNodePtr &statement )
{
ASTNodePtr conditionNode =
statement->getProperty( ASTNodeProperties::iterationProperty );
ASTNodePtr iteratedNode =
statement->getProperty( ASTNodeProperties::iterationStatementProperty );
ExpressionPtr condition = generateExpression( conditionNode );
StatementPtr iterated = generateStatement( iteratedNode );
return StatementPtr( new WhileStatement( condition, iterated ) );
}
ExpressionPtr
Generator::generateExpression( const ASTNodePtr &expression )
{
if ( expression->getType() == ASTNodeTypes::declarationExpression )
return generateDeclaratorExpression( expression );
if ( expression->getRange().getLength() == 0 )
return generateNullExpression( expression );
return generateGenericExpression( expression );
}
ExpressionPtr
Generator::generateDeclaratorExpression( const ASTNodePtr &expression )
{
return generateDeclarator( expression );
}
ExpressionPtr
Generator::generateGenericExpression( const ASTNodePtr &expressionNode )
{
std::string value = expressionNode->getOriginalText();
ExpressionPtr expression( new GenericExpression() );
setElementSource( *expression, expressionNode );
return expression;
}
ExpressionPtr
Generator::generateNullExpression( const ASTNodePtr &expressionNode )
{
ExpressionPtr expression( new NullExpression() );
setElementSource( *expression, expressionNode );
return expression;
}
DeclaratorExpressionPtr
Generator::generateDeclarator( const ASTNodePtr &expression )
{
TypePartPtr primaryType( getDeclaratorPrimaryType( expression ) );
DeclaratorExpressionPtr declaratorExpression( new DeclaratorExpression( primaryType ) );
for ( int index = 0; index < expression->getChildCount(); ++index )
{
const ASTNodePtr &declaratorNode = expression->getChildAt( index );
DeclaratorPtr declarator = makeVariableDeclarator( declaratorNode );
setElementSource( *declarator, declaratorNode );
declaratorExpression->appendDeclarator( declarator );
}
setElementSource( *declaratorExpression, expression );
return declaratorExpression;
}
TypePartPtr
Generator::getDeclaratorPrimaryType( const ASTNodePtr &declaratorNode )
{
ASTNodePtr firstDecl = declaratorNode->getChildAt( 0 );
ASTNodePtr typePrefix =
firstDecl->getProperty( ASTNodeProperties::typeDeclPrefixProperty );
TypePartPtr typePart( new TypePart() );
setElementSource( *typePart, typePrefix );
return typePart;
}
DeclaratorPtr
Generator::makeVariableDeclarator( const ASTNodePtr &node )
{
ASTNodePtr typeNode =
node->getProperty( ASTNodeProperties::typeDeclSecondaryPrefixProperty );
TypePartPtr type = makeOptionalType( typeNode );
ASTNodePtr typeSuffixNode =
node->getProperty( ASTNodeProperties::typeDeclSuffixProperty );
TypePartPtr typeSuffix = makeOptionalType( typeSuffixNode );
ASTNodePtr nameNode =
node->getProperty( ASTNodeProperties::variableNameProperty );
IdentifierPtr name = makeIdentifier( nameNode );
/*
std::string type = typeNode ? typeNode->getBlankedText() : std::string("");
ASTNodePtr nameNode =
node->getProperty( ASTNodeProperties::variableNameProperty );
std::string name = nameNode->getBlankedText();
ASTNodePtr typeSuffixNode =
node->getProperty( ASTNodeProperties::typeDeclSuffixProperty );
std::string typeSuffix = typeSuffixNode ? typeSuffixNode->getBlankedText()
: std::string("");
TypePartPtr typePtr( new TypePart( type ) );
setElementSource( *typePtr, typeNode );
TypePartPtr typeSuffixPtr( new TypePart( typeSuffix ) );
setElementSource( *typeSuffixPtr, typeSuffixNode );
IdentifierPtr namePtr( new Identifier( name ) );
setElementSource( *namePtr, nameNode );
*/
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 ) );
}
TypePartPtr
Generator::makeOptionalType( const ASTNodePtr &typeNode )
{
if ( !typeNode )
return TypePartPtr();
TypePartPtr typePtr( new TypePart( typeNode->getBlankedText() ) );
setElementSource( *typePtr, typeNode );
return typePtr;
}
IdentifierPtr
Generator::makeIdentifier( const ASTNodePtr &identifierNode )
{
IdentifierPtr namePtr( new Identifier( identifierNode->getBlankedText() ) );
setElementSource( *namePtr, identifierNode );
return namePtr;
}
ExpressionPtr
Generator::makeVariableInitializerExpression( const ASTNodePtr &initializerNode )
{
ASTNodePtr valueNode =
initializerNode->getProperty( ASTNodeProperties::valueProperty );
ExpressionPtr value = generateExpression( valueNode );
setElementSource( *value, valueNode );
ExpressionPtr initializer;
if ( initializerNode->getType() == ASTNodeTypes::assignVariableInitializerExpression )
initializer.reset( new AssignInitializerExpression( value ) );
else
initializer.reset( new ConstructorInitializerExpression( value ) );
setElementSource( *initializer, initializerNode );
return initializer;
}
void
Generator::setElementSource( Element &element, const ASTNodePtr &node )
{
element.setSource( ElementASTSourcePtr( new ASTNNodeElementASTSource( node ) ) );
}
} // namespace CodeModel
} // namespace Refactoring
|
|
From: <bl...@us...> - 2003-05-28 07:13:59
|
Update of /cvsroot/cpptool/rfta/bin In directory sc8-pr-cvs1:/tmp/cvs-serv7999/bin Modified Files: install-vc6-addin.bat Log Message: * updated to handle MSDEVDIR which may contains spaces Index: install-vc6-addin.bat =================================================================== RCS file: /cvsroot/cpptool/rfta/bin/install-vc6-addin.bat,v retrieving revision 1.2 retrieving revision 1.3 diff -C2 -d -r1.2 -r1.3 *** install-vc6-addin.bat 22 Apr 2003 19:24:29 -0000 1.2 --- install-vc6-addin.bat 28 May 2003 07:13:56 -0000 1.3 *************** *** 2,7 **** set ADDINS_DIR=%MSDevDir%\AddIns ! xcopy /Y rfta_mdr.ext %ADDINS_DIR% ! xcopy /Y rftaparser_mdr.ext %ADDINS_DIR% ! xcopy /Y rftavc6addin.dll %ADDINS_DIR% pause --- 2,7 ---- set ADDINS_DIR=%MSDevDir%\AddIns ! xcopy /Y rfta_mdr.ext "%ADDINS_DIR%" ! xcopy /Y rftaparser_mdr.ext "%ADDINS_DIR%" ! xcopy /Y rftavc6addin.dll "%ADDINS_DIR%" pause |
|
From: <bl...@us...> - 2003-05-28 07:13:28
|
Update of /cvsroot/cpptool/rfta/src/rftaparser
In directory sc8-pr-cvs1:/tmp/cvs-serv7708/src/rftaparser
Modified Files:
CPPParserTest.cpp CPPParserTest.h
Log Message:
* added test to check that the node type returned by getFunctionAt() is 'function implementation'
Index: CPPParserTest.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rftaparser/CPPParserTest.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** CPPParserTest.cpp 16 May 2003 19:55:02 -0000 1.4
--- CPPParserTest.cpp 28 May 2003 07:13:24 -0000 1.5
***************
*** 7,10 ****
--- 7,11 ----
#include "CPPParserTest.h"
#include <rfta/parser/CPPParser.h>
+ #include <rfta/parser/ASTNodes.h>
***************
*** 45,48 ****
--- 46,50 ----
int selectionIndex = source.getKeyedIndex( selectionKey_, 0 );
ASTNodePtr functionNode = parser.parseForFunctionBodyAt( selectionIndex );
+ RFTA_ASSERT_NODE_TYPE( functionNode, ASTNodeTypes::functionImplementation, "function node" );
CPPUNIT_ASSERT_MESSAGE( "Failed to find function implementation node", functionNode );
CPPUNIT_ASSERT( functionNode->getRange().contains( SourceRange( selectionIndex, 0 ) ) );
Index: CPPParserTest.h
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rftaparser/CPPParserTest.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** CPPParserTest.h 3 May 2003 17:43:12 -0000 1.2
--- CPPParserTest.h 28 May 2003 07:13:24 -0000 1.3
***************
*** 6,10 ****
#define RFTA_CPPPARSERTEST_H
! #include "UnitTesting.h"
#include "KeyedString.h"
--- 6,10 ----
#define RFTA_CPPPARSERTEST_H
! #include "ParserTesting.h"
#include "KeyedString.h"
|
|
From: <bl...@us...> - 2003-05-26 21:29:30
|
Update of /cvsroot/cpptool/rfta/include/rfta/refactoring In directory sc8-pr-cvs1:/tmp/cvs-serv29074/include/rfta/refactoring Removed Files: CodeModel.h Log Message: * renamed CodeModel.[ch] to CodeModelGenerator.[ch] --- CodeModel.h DELETED --- |
|
From: <bl...@us...> - 2003-05-26 21:29:29
|
Update of /cvsroot/cpptool/rfta/src/rfta In directory sc8-pr-cvs1:/tmp/cvs-serv29074/src/rfta Removed Files: CodeModel.cpp Log Message: * renamed CodeModel.[ch] to CodeModelGenerator.[ch] --- CodeModel.cpp DELETED --- |
|
From: <bl...@us...> - 2003-05-26 21:13:55
|
Update of /cvsroot/cpptool/rfta/src/astdumper
In directory sc8-pr-cvs1:/tmp/cvs-serv23614/src/astdumper
Modified Files:
Main.cpp
Log Message:
* added better command line check
Index: Main.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/astdumper/Main.cpp,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** Main.cpp 1 May 2003 09:08:09 -0000 1.4
--- Main.cpp 26 May 2003 21:13:52 -0000 1.5
***************
*** 42,46 ****
char *argv[] )
{
! if ( argc > 3 )
{
printUsage();
--- 42,46 ----
char *argv[] )
{
! if ( argc != 3 )
{
printUsage();
|
|
From: <bl...@us...> - 2003-05-26 21:12:36
|
Update of /cvsroot/cpptool/rfta/include/rfta/refactoring
In directory sc8-pr-cvs1:/tmp/cvs-serv23046/include/rfta/refactoring
Modified Files:
CodeModelElement.h CodeModelForward.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.
Index: CodeModelElement.h
===================================================================
RCS file: /cvsroot/cpptool/rfta/include/rfta/refactoring/CodeModelElement.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -d -r1.14 -r1.15
*** CodeModelElement.h 10 Apr 2003 08:37:46 -0000 1.14
--- CodeModelElement.h 26 May 2003 21:12:33 -0000 1.15
***************
*** 7,11 ****
#include <rfta/refactoring/CodeModelForward.h>
! #include <rfta/parser/ASTNodeForward.h>
#include <boost/enable_shared_from_this.hpp>
#include <boost/utility.hpp>
--- 7,11 ----
#include <rfta/refactoring/CodeModelForward.h>
! #include <rfta/parser/SourceRange.h>
#include <boost/enable_shared_from_this.hpp>
#include <boost/utility.hpp>
***************
*** 15,18 ****
--- 15,32 ----
+ class RFTA_API ElementASTSource
+ {
+ public:
+ virtual ~ElementASTSource()
+ {
+ }
+
+ virtual SourceRange getSourceRange() const = 0;
+
+ virtual std::string getSourceText() const = 0;
+ };
+
+
+
/// This class represents
class RFTA_API Element : public boost::enable_shared_from_this<Element>
***************
*** 39,43 ****
/** Set the source for this element.
*/
! void setSource( const ASTNodePtr &node );
virtual void accept( ElementVisitor &visitor );
--- 53,57 ----
/** Set the source for this element.
*/
! void setSource( const ElementASTSourcePtr &node );
virtual void accept( ElementVisitor &visitor );
***************
*** 55,59 ****
virtual void setElementIsFromSource();
! ASTNodePtr node_;
};
--- 69,73 ----
virtual void setElementIsFromSource();
! ElementASTSourcePtr astSource_;
};
Index: CodeModelForward.h
===================================================================
RCS file: /cvsroot/cpptool/rfta/include/rfta/refactoring/CodeModelForward.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -d -r1.14 -r1.15
*** CodeModelForward.h 6 Apr 2003 18:06:59 -0000 1.14
--- CodeModelForward.h 26 May 2003 21:12:33 -0000 1.15
***************
*** 12,15 ****
--- 12,16 ----
class Change;
+ class ElementASTSource;
class Element;
class Label;
***************
*** 69,72 ****
--- 70,74 ----
typedef boost::shared_ptr<Element> ElementPtr;
+ typedef boost::shared_ptr<ElementASTSource> ElementASTSourcePtr;
typedef boost::shared_ptr<Label> LabelPtr;
typedef boost::shared_ptr<TypePart> TypePartPtr;
|
Update of /cvsroot/cpptool/rfta/src/rfta
In directory sc8-pr-cvs1:/tmp/cvs-serv23046/src/rfta
Modified Files:
CodeModelElement.cpp CodeModelGeneratorTest.cpp
CodeWriterTestBase.cpp rfta.dsp
SplitDeclarationRefactoring.cpp
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.
Index: CodeModelElement.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeModelElement.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** CodeModelElement.cpp 21 Apr 2003 03:08:54 -0000 1.11
--- CodeModelElement.cpp 26 May 2003 21:12:33 -0000 1.12
***************
*** 26,30 ****
Element::isFromSource() const
{
! return node_;
}
--- 26,30 ----
Element::isFromSource() const
{
! return astSource_;
}
***************
*** 33,38 ****
Element::getSourceText() const
{
! if ( node_ )
! return node_->getOriginalText();
return std::string();
}
--- 33,38 ----
Element::getSourceText() const
{
! if ( astSource_ )
! return astSource_->getSourceText();
return std::string();
}
***************
*** 42,47 ****
Element::getSourceRange() const
{
! if ( node_ )
! return node_->getRange();
return SourceRange();
}
--- 42,47 ----
Element::getSourceRange() const
{
! if ( astSource_ )
! return astSource_->getSourceRange();
return SourceRange();
}
***************
*** 49,55 ****
void
! Element::setSource( const ASTNodePtr &node )
{
! node_ = node;
setElementIsFromSource();
}
--- 49,55 ----
void
! Element::setSource( const ElementASTSourcePtr &node )
{
! astSource_ = node;
setElementIsFromSource();
}
Index: CodeModelGeneratorTest.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeModelGeneratorTest.cpp,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** CodeModelGeneratorTest.cpp 15 May 2003 16:29:13 -0000 1.9
--- CodeModelGeneratorTest.cpp 26 May 2003 21:12:33 -0000 1.10
***************
*** 6,10 ****
#include "stdafx.h"
#include "CodeModelGeneratorTest.h"
! #include <rfta/refactoring/CodeModel.h>
#include <rfta/refactoring/CodeModelStatements.h>
#include <rfta/refactoring/CodeModelExpressions.h>
--- 6,10 ----
#include "stdafx.h"
#include "CodeModelGeneratorTest.h"
! #include <rfta/refactoring/CodeModelGenerator.h>
#include <rfta/refactoring/CodeModelStatements.h>
#include <rfta/refactoring/CodeModelExpressions.h>
Index: CodeWriterTestBase.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/CodeWriterTestBase.cpp,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** CodeWriterTestBase.cpp 15 May 2003 16:29:13 -0000 1.8
--- CodeWriterTestBase.cpp 26 May 2003 21:12:33 -0000 1.9
***************
*** 6,10 ****
#include "stdafx.h"
#include "CodeWriterTestBase.h"
! #include <rfta/refactoring/CodeModel.h>
#include <rfta/Parser/StatementsParser.h>
--- 6,10 ----
#include "stdafx.h"
#include "CodeWriterTestBase.h"
! #include <rfta/refactoring/CodeModelGenerator.h>
#include <rfta/Parser/StatementsParser.h>
Index: rfta.dsp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/rfta.dsp,v
retrieving revision 1.48
retrieving revision 1.49
diff -C2 -d -r1.48 -r1.49
*** rfta.dsp 16 May 2003 08:30:33 -0000 1.48
--- rfta.dsp 26 May 2003 21:12:33 -0000 1.49
***************
*** 56,61 ****
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib cppunit_dll.lib /nologo /dll /debug /machine:I386 /out:"..\..\build\rfta\Release/rfta_mdr.ext" /libpath:"../../deplib/cppunit/lib" /libpath:"../../lib"
# Begin Special Build Tool
! TargetDir=\Projects\Cpptool\rfta\build\rfta\Release
! TargetPath=\Projects\Cpptool\rfta\build\rfta\Release\rfta_mdr.ext
TargetName=rfta_mdr
SOURCE="$(InputPath)"
--- 56,61 ----
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib cppunit_dll.lib /nologo /dll /debug /machine:I386 /out:"..\..\build\rfta\Release/rfta_mdr.ext" /libpath:"../../deplib/cppunit/lib" /libpath:"../../lib"
# Begin Special Build Tool
! TargetDir=\prg\vc\Rfta\build\rfta\Release
! TargetPath=\prg\vc\Rfta\build\rfta\Release\rfta_mdr.ext
TargetName=rfta_mdr
SOURCE="$(InputPath)"
***************
*** 90,95 ****
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib cppunitd_dll.lib /nologo /dll /debug /machine:I386 /out:"..\..\build\rfta\Debug\rfta_mdd.ext" /pdbtype:sept /libpath:"../../deplib/cppunit/lib" /libpath:"../../lib"
# Begin Special Build Tool
! TargetDir=\Projects\Cpptool\rfta\build\rfta\Debug
! TargetPath=\Projects\Cpptool\rfta\build\rfta\Debug\rfta_mdd.ext
TargetName=rfta_mdd
SOURCE="$(InputPath)"
--- 90,95 ----
# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib cppunitd_dll.lib /nologo /dll /debug /machine:I386 /out:"..\..\build\rfta\Debug\rfta_mdd.ext" /pdbtype:sept /libpath:"../../deplib/cppunit/lib" /libpath:"../../lib"
# Begin Special Build Tool
! TargetDir=\prg\vc\Rfta\build\rfta\Debug
! TargetPath=\prg\vc\Rfta\build\rfta\Debug\rfta_mdd.ext
TargetName=rfta_mdd
SOURCE="$(InputPath)"
***************
*** 331,342 ****
# Begin Source File
- SOURCE=.\CodeModel.cpp
- # End Source File
- # Begin Source File
-
- SOURCE=..\..\include\rfta\refactoring\CodeModel.h
- # End Source File
- # Begin Source File
-
SOURCE=..\..\doc\CodeModel.txt
# End Source File
--- 331,334 ----
***************
*** 360,363 ****
--- 352,363 ----
SOURCE=..\..\include\rfta\refactoring\CodeModelForward.h
+ # End Source File
+ # Begin Source File
+
+ SOURCE=.\CodeModelGenerator.cpp
+ # End Source File
+ # Begin Source File
+
+ SOURCE=..\..\include\rfta\refactoring\CodeModelGenerator.h
# End Source File
# Begin Source File
Index: SplitDeclarationRefactoring.cpp
===================================================================
RCS file: /cvsroot/cpptool/rfta/src/rfta/SplitDeclarationRefactoring.cpp,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** SplitDeclarationRefactoring.cpp 22 Apr 2003 19:23:27 -0000 1.2
--- SplitDeclarationRefactoring.cpp 26 May 2003 21:12:33 -0000 1.3
***************
*** 21,25 ****
#include <rfta/refactoring/RefactoringError.h>
#include <rfta/refactoring/TextDocument.h>
! #include <rfta/refactoring/CodeModel.h>
#include <rfta/refactoring/CodeModelStatements.h>
#include <rfta/refactoring/CodeModelForward.h>
--- 21,25 ----
#include <rfta/refactoring/RefactoringError.h>
#include <rfta/refactoring/TextDocument.h>
! #include <rfta/refactoring/CodeModelGenerator.h>
#include <rfta/refactoring/CodeModelStatements.h>
#include <rfta/refactoring/CodeModelForward.h>
|
|
From: <bl...@us...> - 2003-05-26 20:13:24
|
Update of /cvsroot/cpptool/rfta/doc
In directory sc8-pr-cvs1:/tmp/cvs-serv28486/doc
Modified Files:
RenameLocaleVariable.html
Log Message:
* added example
Index: RenameLocaleVariable.html
===================================================================
RCS file: /cvsroot/cpptool/rfta/doc/RenameLocaleVariable.html,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** RenameLocaleVariable.html 26 May 2003 07:26:03 -0000 1.1
--- RenameLocaleVariable.html 26 May 2003 20:13:21 -0000 1.2
***************
*** 7,16 ****
</head>
<body>
! Rename Locale Variable Refactoring<br>
<br>
This refactoring is used to rename a single locale variable with a free
or a member function body.<br>
! <br>
! KNOWN ISSUES: <br>
<ul>
<li>For scope is handled as defined by the C++ standard (variable
--- 7,15 ----
</head>
<body>
! <h1> Rename Locale Variable Refactoring</h1>
<br>
This refactoring is used to rename a single locale variable with a free
or a member function body.<br>
! <h2> KNOWN ISSUES: </h2>
<ul>
<li>For scope is handled as defined by the C++ standard (variable
***************
*** 26,30 ****
declaration. </li>
</ul>
! EXAMPLES:<br>
<br>
<br>
--- 25,76 ----
declaration. </li>
</ul>
! <h2> EXAMPLE:</h2>
! Rename locale variable 'x' to 'linePrice':<br>
! <br>
! <table cellpadding="2" cellspacing="0" border="1"
! style="text-align: left; width: 100%;">
! <tbody>
! <tr>
! <td style="vertical-align: top;">Original text:<br>
! </td>
! <td style="vertical-align: top;">Refactored text:<br>
! </td>
! </tr>
! <tr>
! <td style="vertical-align: top; font-family: monospace;">void
! OrderLine::computePrice( double )<br>
! {<br>
! double x = getPrice();<br>
! <span style="font-weight: bold; color: rgb(255, 0, 0);">x</span>
! += x * rate;<br>
! <br>
! if ( isSummer() )<br>
! {<br>
! double x = summerRate * summerDays;<br>
! addTaxes( x );<br>
! }<br>
! <br>
! return x * getQuantity();<br>
! }</td>
! <td style="vertical-align: top; font-family: monospace;">void
! OrderLine::computePrice( double )<br>
! {<br>
! double <span style="color: rgb(255, 0, 0);">linePrice </span>=
! getPrice();<br>
! <span style="color: rgb(255, 0, 0);">linePrice </span>+= <span
! style="color: rgb(255, 0, 0);">linePrice </span>* rate;<br>
! <br>
! if ( isSummer() )<br>
! {<br>
! double x = summerRate * summerDays;<br>
! addTaxes( x );<br>
! }<br>
! <br>
! return <span style="color: rgb(255, 0, 0);">linePrice </span>*
! getQuantity();<br>
! }</td>
! </tr>
! </tbody>
! </table>
<br>
<br>
|
|
From: <bl...@us...> - 2003-05-26 07:26:07
|
Update of /cvsroot/cpptool/rfta/doc In directory sc8-pr-cvs1:/tmp/cvs-serv24921/doc Modified Files: rfta_screenshots.html Added Files: RenameLocaleVariable.html Log Message: * added documentation for RenameLocaleVariable refactoring. --- NEW FILE: RenameLocaleVariable.html --- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1"> <title>C++ Refactoring Assistant: Rename Locale Variable Refactoring</title> </head> <body> Rename Locale Variable Refactoring<br> <br> This refactoring is used to rename a single locale variable with a free or a member function body.<br> <br> KNOWN ISSUES: <br> <ul> <li>For scope is handled as defined by the C++ standard (variable defined in for initialization are in a new scope). This is not the behavior of older compiler (VC++ 6 for instance does not define a new scope).</li> <li>The new locale variable name is not checked for conflict (be careful not to enter the name of an existing variable or function used locally).</li> <li>Function pointers declaration are not recognized as locale variable declaration.</li> <li>The parser sometime failed to recognize a locale variable declaration. </li> </ul> EXAMPLES:<br> <br> <br> </body> </html> Index: rfta_screenshots.html =================================================================== RCS file: /cvsroot/cpptool/rfta/doc/rfta_screenshots.html,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** rfta_screenshots.html 19 May 2003 21:43:34 -0000 1.1 --- rfta_screenshots.html 26 May 2003 07:26:04 -0000 1.2 *************** *** 27,31 **** <br> <br> ! Rename Locale Variable Refactoring<br> <br> <br> --- 27,37 ---- <br> <br> ! All the current refactorings only use the start of the selection or the ! current carret location to determine which locale variable should be ! renamed. You can point out any occurences of the locale variable you ! want to rename.<br> ! <br> ! <br> ! <br> <br> <br> |
|
From: <bl...@us...> - 2003-05-25 18:04:55
|
Update of /cvsroot/cpptool/rfta/bug
In directory sc8-pr-cvs1:/tmp/cvs-serv6782/bug
Modified Files:
List.txt
Log Message:
* found infinite loop cause: K&R function declaration.
Index: List.txt
===================================================================
RCS file: /cvsroot/cpptool/rfta/bug/List.txt,v
retrieving revision 1.11
retrieving revision 1.12
diff -C2 -d -r1.11 -r1.12
*** List.txt 25 May 2003 17:27:40 -0000 1.11
--- List.txt 25 May 2003 18:04:52 -0000 1.12
***************
*** 191,194 ****
--- 191,202 ----
}
---
+ Infinite loop when parsing K&R function declaration: audacity/getopt1.c
+ int
+ main (argc, argv)
+ int argc;
+ char **argv;
+ {
+ }
+ ---
|