From d9a6d51ec70598fcd000e2430df0969884975eb1 Mon Sep 17 00:00:00 2001 From: Aaron Ballman Date: Fri, 14 Mar 2014 20:59:21 +0000 Subject: [PATCH] [C++11] Removing the local_import_begin() and local_import_end() APIs and replacing with a range-only local_imports() API. Privatizes the iterator class as well. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@203970 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/ASTContext.h | 80 ++++++++++++++++----------------- lib/Serialization/ASTWriter.cpp | 8 +--- 2 files changed, 42 insertions(+), 46 deletions(-) diff --git a/include/clang/AST/ASTContext.h b/include/clang/AST/ASTContext.h index 60621b9aa2..264170b6a6 100644 --- a/include/clang/AST/ASTContext.h +++ b/include/clang/AST/ASTContext.h @@ -626,6 +626,43 @@ public: private: mutable comments::CommandTraits CommentCommandTraits; + /// \brief Iterator that visits import declarations. + class import_iterator { + ImportDecl *Import; + + public: + typedef ImportDecl *value_type; + typedef ImportDecl *reference; + typedef ImportDecl *pointer; + typedef int difference_type; + typedef std::forward_iterator_tag iterator_category; + + import_iterator() : Import() {} + explicit import_iterator(ImportDecl *Import) : Import(Import) {} + + reference operator*() const { return Import; } + pointer operator->() const { return Import; } + + import_iterator &operator++() { + Import = ASTContext::getNextLocalImport(Import); + return *this; + } + + import_iterator operator++(int) { + import_iterator Other(*this); + ++(*this); + return Other; + } + + friend bool operator==(import_iterator X, import_iterator Y) { + return X.Import == Y.Import; + } + + friend bool operator!=(import_iterator X, import_iterator Y) { + return X.Import != Y.Import; + } + }; + public: comments::CommandTraits &getCommentCommandTraits() const { return CommentCommandTraits; @@ -712,47 +749,10 @@ public: return Import->NextLocalImport; } - /// \brief Iterator that visits import declarations. - class import_iterator { - ImportDecl *Import; - - public: - typedef ImportDecl *value_type; - typedef ImportDecl *reference; - typedef ImportDecl *pointer; - typedef int difference_type; - typedef std::forward_iterator_tag iterator_category; - - import_iterator() : Import() { } - explicit import_iterator(ImportDecl *Import) : Import(Import) { } - - reference operator*() const { return Import; } - pointer operator->() const { return Import; } - - import_iterator &operator++() { - Import = ASTContext::getNextLocalImport(Import); - return *this; - } - - import_iterator operator++(int) { - import_iterator Other(*this); - ++(*this); - return Other; - } - - friend bool operator==(import_iterator X, import_iterator Y) { - return X.Import == Y.Import; - } - - friend bool operator!=(import_iterator X, import_iterator Y) { - return X.Import != Y.Import; - } - }; - - import_iterator local_import_begin() const { - return import_iterator(FirstLocalImport); + typedef llvm::iterator_range import_range; + import_range local_imports() const { + return import_range(import_iterator(FirstLocalImport), import_iterator()); } - import_iterator local_import_end() const { return import_iterator(); } Decl *getPrimaryMergedDecl(Decl *D) { Decl *Result = MergedDecls.lookup(D); diff --git a/lib/Serialization/ASTWriter.cpp b/lib/Serialization/ASTWriter.cpp index 95a470d922..b3332f9653 100644 --- a/lib/Serialization/ASTWriter.cpp +++ b/lib/Serialization/ASTWriter.cpp @@ -2204,9 +2204,7 @@ void ASTWriter::WriteSubmodules(Module *WritingModule) { // other consumers of this information. SourceManager &SrcMgr = PP->getSourceManager(); ModuleMap &ModMap = PP->getHeaderSearchInfo().getModuleMap(); - for (ASTContext::import_iterator I = Context->local_import_begin(), - IEnd = Context->local_import_end(); - I != IEnd; ++I) { + for (const auto *I : Context->local_imports()) { if (Module *ImportedFrom = ModMap.inferModuleFromLocation(FullSourceLoc(I->getLocation(), SrcMgr))) { @@ -4276,9 +4274,7 @@ void ASTWriter::WriteASTCore(Sema &SemaRef, if (!WritingModule) { // Write the submodules that were imported, if any. RecordData ImportedModules; - for (ASTContext::import_iterator I = Context.local_import_begin(), - IEnd = Context.local_import_end(); - I != IEnd; ++I) { + for (const auto *I : Context.local_imports()) { assert(SubmoduleIDs.find(I->getImportedModule()) != SubmoduleIDs.end()); ImportedModules.push_back(SubmoduleIDs[I->getImportedModule()]); } -- 2.40.0