Update of /cvsroot/cpptool/CppParser/examples/parser In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv27491/examples/parser Modified Files: cpp_parser.suo cppparsertest.cpp grammarparsertest.cpp preprocessortest.cpp scope.cpp scope.h symboltabletest.cpp Log Message: * fixed namespace resolution issue N1::N1 Index: cpp_parser.suo =================================================================== RCS file: /cvsroot/cpptool/CppParser/examples/parser/cpp_parser.suo,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 Binary files /tmp/cvsxDu2Vr and /tmp/cvsYNIMJq differ Index: scope.h =================================================================== RCS file: /cvsroot/cpptool/CppParser/examples/parser/scope.h,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** scope.h 8 Jun 2004 20:23:17 -0000 1.1.1.1 --- scope.h 14 Jun 2004 23:08:11 -0000 1.2 *************** *** 53,56 **** --- 53,62 ---- virtual SymbolDeclarationPtr resolve( const std::string &name ) const = 0; + // to not recurse down + virtual SymbolDeclarationPtr memberResolve( const std::string &name ) const = 0; + + // default, none + virtual SymbolDeclarationPtr getMemberDeclaration( const std::string &name ) const; + // default is false virtual bool isTypeDeclaration() const; *************** *** 80,83 **** --- 86,90 ---- void accept( ScopeVisitor &visitor ); SymbolDeclarationPtr resolve( const std::string &name ) const; + SymbolDeclarationPtr memberResolve( const std::string &name ) const; std::string str() const; private: *************** *** 91,94 **** --- 98,102 ---- DeclarationScope( const SymbolDeclarationPtr &declaration ); SymbolDeclarationPtr declaration() const; + SymbolDeclarationPtr getMemberDeclaration( const std::string &name ) const; private: SymbolDeclarationPtr declaration_; *************** *** 100,103 **** --- 108,112 ---- void accept( ScopeVisitor &visitor ); SymbolDeclarationPtr resolve( const std::string &name ) const; + SymbolDeclarationPtr memberResolve( const std::string &name ) const; std::string str() const; }; *************** *** 111,114 **** --- 120,124 ---- void accept( ScopeVisitor &visitor ); SymbolDeclarationPtr resolve( const std::string &name ) const; + SymbolDeclarationPtr memberResolve( const std::string &name ) const; std::string str() const; }; *************** *** 125,128 **** --- 135,139 ---- void accept( ScopeVisitor &visitor ); SymbolDeclarationPtr resolve( const std::string &name ) const; + SymbolDeclarationPtr memberResolve( const std::string &name ) const; std::string str() const; bool isTypeDeclaration() const; *************** *** 139,142 **** --- 150,154 ---- void accept( ScopeVisitor &visitor ); SymbolDeclarationPtr resolve( const std::string &name ) const; + SymbolDeclarationPtr memberResolve( const std::string &name ) const; std::string str() const; bool isTypeDeclaration() const; *************** *** 159,162 **** --- 171,175 ---- void accept( ScopeVisitor &visitor ); SymbolDeclarationPtr resolve( const std::string &name ) const; + SymbolDeclarationPtr memberResolve( const std::string &name ) const; std::string str() const; private: *************** *** 180,183 **** --- 193,197 ---- void accept( ScopeVisitor &visitor ); SymbolDeclarationPtr resolve( const std::string &name ) const; + SymbolDeclarationPtr memberResolve( const std::string &name ) const; std::string str() const; }; Index: cppparsertest.cpp =================================================================== RCS file: /cvsroot/cpptool/CppParser/examples/parser/cppparsertest.cpp,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** cppparsertest.cpp 8 Jun 2004 20:23:12 -0000 1.1.1.1 --- cppparsertest.cpp 14 Jun 2004 23:08:11 -0000 1.2 *************** *** 257,261 **** Parser::CppParser::tokenize( "operator =", actual ); Parser::Tokens expected = tokens( "operator", spaces_t( 1 ), "=" ); ! CppUT::checkStlSequenceEqual( expected, actual, &weakTokenEqual ); } --- 257,261 ---- Parser::CppParser::tokenize( "operator =", actual ); Parser::Tokens expected = tokens( "operator", spaces_t( 1 ), "=" ); ! CppUT::checkCustomEqualityStlSequenceEqual( expected, actual, &weakTokenEqual ); } Index: preprocessortest.cpp =================================================================== RCS file: /cvsroot/cpptool/CppParser/examples/parser/preprocessortest.cpp,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** preprocessortest.cpp 8 Jun 2004 20:23:17 -0000 1.1.1.1 --- preprocessortest.cpp 14 Jun 2004 23:08:11 -0000 1.2 *************** *** 30,34 **** Parser::Tokens actual; Parser::CppParser::preprocess( input, actual ); ! CppUT::checkStlSequenceEqual( expected, actual, &weakTokenEqual ); } --- 30,34 ---- Parser::Tokens actual; Parser::CppParser::preprocess( input, actual ); ! CppUT::checkCustomEqualityStlSequenceEqual( expected, actual, &weakTokenEqual ); } *************** *** 40,44 **** Parser::CppParser::preprocess( "operator =", actual ); Parser::Tokens expected = tokens( "operator", spaces_t( 1 ), "=" ); ! CppUT::checkStlSequenceEqual( expected, actual, &weakTokenEqual ); } --- 40,44 ---- Parser::CppParser::preprocess( "operator =", actual ); Parser::Tokens expected = tokens( "operator", spaces_t( 1 ), "=" ); ! CppUT::checkCustomEqualityStlSequenceEqual( expected, actual, &weakTokenEqual ); } Index: symboltabletest.cpp =================================================================== RCS file: /cvsroot/cpptool/CppParser/examples/parser/symboltabletest.cpp,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** symboltabletest.cpp 8 Jun 2004 20:23:18 -0000 1.1.1.1 --- symboltabletest.cpp 14 Jun 2004 23:08:11 -0000 1.2 *************** *** 319,323 **** { public: ! DeclarationChecker( Parser::SymbolTable &table, LocationTracker &tracker_ ); --- 319,323 ---- { public: ! DeclarationChecker( Parser::Project &project, LocationTracker &tracker_ ); *************** *** 341,345 **** --- 341,347 ---- void exitScope(); Parser::SymbolDeclarationPtr resolve( const std::string &name ) const; + Parser::SymbolDeclarationPtr memberResolve( const std::string &name ) const; + Parser::Project &project_; Parser::SymbolTable &table_; typedef CppUT::Enumerator<NodePtr> NodeEnumerator; *************** *** 351,357 **** ! DeclarationChecker::DeclarationChecker( Parser::SymbolTable &table, LocationTracker &tracker ) ! : table_( table ) , tracker_( tracker ) { --- 353,389 ---- ! struct LocationStringizer ! { ! LocationStringizer( Parser::Project &project ) ! : project_( project ) ! { ! } ! ! std::string operator()( const Parser::Location &location ) const ! { ! std::ostringstream os; ! std::string path = project_.sourcePath( location.file() ); ! std::string text = project_.readSourceFile( path ); ! int line = std::count( text.begin(), text.begin() + location.pos(), '\n' ); ! int lastEOLPos = text.rfind( '\n', location.pos() ); ! int column = location.pos(); ! if ( lastEOLPos != std::string::npos ) ! column -= lastEOLPos; ! os << "Location<file=" << location.file() ! << ":\"" << path << "\"; line=" << (line+1) ! << "; column=" << (column+1) ! << "; pos=" << location.pos() ! << ">"; ! return os.str(); ! } ! ! Parser::Project &project_; ! }; ! ! ! DeclarationChecker::DeclarationChecker( Parser::Project &project, LocationTracker &tracker ) ! : project_( project ) ! , table_( project.symbolTable() ) , tracker_( tracker ) { *************** *** 377,380 **** --- 409,413 ---- DeclarationChecker::resolve( const std::string &name ) const { + // Notes: investigate needs for resolve/memberResolve... Parser::ScopePtr currentScope = scopes_.top(); return currentScope->resolve( name ); *************** *** 382,385 **** --- 415,426 ---- + Parser::SymbolDeclarationPtr + DeclarationChecker::memberResolve( const std::string &name ) const + { + Parser::ScopePtr currentScope = scopes_.top(); + return currentScope->memberResolve( name ); + } + + CppUT::Message DeclarationChecker::makeMessage( const NodePtr &node, *************** *** 407,413 **** } ! CppUT::checkSetEqual( CppUT::enumStl( expectedLocations ), table_.enumReferences( declaration ), makeMessage( references, "Some references are incorrect..." ) ); } --- 448,461 ---- } ! LocationStringizer stringizer( project_ ); ! CppUT::checkCustomStringSetEqual( CppUT::enumStl( expectedLocations ), ! table_.enumReferences( declaration ), ! stringizer, ! makeMessage( references, ! "Some references are incorrect..." ) ); ! /* CppUT::checkSetEqual( CppUT::enumStl( expectedLocations ), table_.enumReferences( declaration ), makeMessage( references, "Some references are incorrect..." ) ); + */ } *************** *** 489,493 **** { std::string namespaceName = namespaceNode->braceValue(); ! Parser::SymbolDeclarationPtr declaration = resolve( namespaceName ); CppUT::checkTrue( declaration, makeMessage( namespaceNode, "Declaration not found." ) ); checkReferences( namespaceNode, declaration ); --- 537,541 ---- { std::string namespaceName = namespaceNode->braceValue(); ! Parser::SymbolDeclarationPtr declaration = memberResolve( namespaceName ); CppUT::checkTrue( declaration, makeMessage( namespaceNode, "Declaration not found." ) ); checkReferences( namespaceNode, declaration ); *************** *** 536,540 **** processor.processFile( path ); NodePtr root = processor.declarationsTree(); ! DeclarationChecker checker( project_->symbolTable(), *tracker_ ); checker.checkDeclarations( root ); } --- 584,588 ---- processor.processFile( path ); NodePtr root = processor.declarationsTree(); ! DeclarationChecker checker( *project_, *tracker_ ); checker.checkDeclarations( root ); } Index: scope.cpp =================================================================== RCS file: /cvsroot/cpptool/CppParser/examples/parser/scope.cpp,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** scope.cpp 8 Jun 2004 20:23:17 -0000 1.1.1.1 --- scope.cpp 14 Jun 2004 23:08:11 -0000 1.2 *************** *** 50,53 **** --- 50,60 ---- + SymbolDeclarationPtr + Scope::getMemberDeclaration( const std::string &name ) const + { + return SymbolDeclarationPtr(); + } + + bool Scope::isTypeDeclaration() const *************** *** 86,89 **** --- 93,109 ---- } + SymbolDeclarationPtr + OverallScope::memberResolve( const std::string &name ) const + { + TranslationUnitScopes::const_iterator it = scopes_.begin(); + for ( ; it != scopes_.end(); ++it ) + { + SymbolDeclarationPtr declaration = it->second->memberResolve( name ); + if ( declaration ) + return declaration; + } + return SymbolDeclarationPtr(); + } + std::string OverallScope::str() const *************** *** 108,111 **** --- 128,140 ---- + SymbolDeclarationPtr + DeclarationScope::getMemberDeclaration( const std::string &name ) const + { + if ( declaration_->name() == name ) + return declaration_; + return SymbolDeclarationPtr(); + } + + // class TranslationUnitScope // ////////////////////////////////////////////////////////////////// *************** *** 129,132 **** --- 158,173 ---- } + SymbolDeclarationPtr + TranslationUnitScope::memberResolve( const std::string &name ) const + { + for ( int index = 0; index < subScopeCount(); ++index ) + { + SymbolDeclarationPtr declaration = subScopeAt(index)->getMemberDeclaration( name ); + if ( declaration ) + return declaration; + } + return SymbolDeclarationPtr(); + } + std::string TranslationUnitScope::str() const *************** *** 167,170 **** --- 208,224 ---- } + SymbolDeclarationPtr + NamespaceScope::memberResolve( const std::string &name ) const + { + for ( int index = 0; index < subScopeCount(); ++index ) + { + SymbolDeclarationPtr declaration = subScopeAt(index)->getMemberDeclaration( name ); + if ( declaration ) + return declaration; + } + + return SymbolDeclarationPtr(); + } + std::string NamespaceScope::str() const *************** *** 204,207 **** --- 258,267 ---- } + SymbolDeclarationPtr + TypedefScope::memberResolve( const std::string &name ) const + { + return SymbolDeclarationPtr(); + } + std::string TypedefScope::str() const *************** *** 239,242 **** --- 299,308 ---- } + SymbolDeclarationPtr + ClassScope::memberResolve( const std::string &name ) const + { + return SymbolDeclarationPtr(); + } + std::string ClassScope::str() const *************** *** 324,327 **** --- 390,399 ---- } + SymbolDeclarationPtr + MemberFunctionScope::memberResolve( const std::string &name ) const + { + return SymbolDeclarationPtr(); + } + std::string MemberFunctionScope::str() const *************** *** 346,349 **** --- 418,427 ---- } + SymbolDeclarationPtr + BlockScope::memberResolve( const std::string &name ) const + { + return SymbolDeclarationPtr(); + } + std::string BlockScope::str() const Index: grammarparsertest.cpp =================================================================== RCS file: /cvsroot/cpptool/CppParser/examples/parser/grammarparsertest.cpp,v retrieving revision 1.1.1.1 retrieving revision 1.2 diff -C2 -d -r1.1.1.1 -r1.2 *** grammarparsertest.cpp 8 Jun 2004 20:23:14 -0000 1.1.1.1 --- grammarparsertest.cpp 14 Jun 2004 23:08:11 -0000 1.2 *************** *** 19,23 **** Parser::Tokens actual; Parser::GrammarParser::tokenize( grammar, actual ); ! CppUT::checkStlSequenceEqual( expected, actual, &weakTokenEqual ); } --- 19,23 ---- Parser::Tokens actual; Parser::GrammarParser::tokenize( grammar, actual ); ! CppUT::checkCustomEqualityStlSequenceEqual( expected, actual, &weakTokenEqual ); } |