From 52ba870eba17e634339622dbf103434ca31935eb Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sat, 28 Mar 2009 00:55:35 +0000 Subject: [PATCH] move StatListener out to top level. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67886 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Basic/FileManager.h | 4 +- tools/clang-cc/CacheTokens.cpp | 66 +++++++++++++++---------------- 2 files changed, 36 insertions(+), 34 deletions(-) diff --git a/include/clang/Basic/FileManager.h b/include/clang/Basic/FileManager.h index 6aa88629ce..a8ed87011f 100644 --- a/include/clang/Basic/FileManager.h +++ b/include/clang/Basic/FileManager.h @@ -126,7 +126,9 @@ public: /// setStatCache - Installs the provided StatSysCallCache object within /// the FileManager. Ownership of this object is transferred to the /// FileManager. - void setStatCache(StatSysCallCache *statCache) { StatCache.reset(statCache); } + void setStatCache(StatSysCallCache *statCache) { + StatCache.reset(statCache); + } /// getDirectory - Lookup, cache, and verify the specified directory. This /// returns null if the directory doesn't exist. diff --git a/tools/clang-cc/CacheTokens.cpp b/tools/clang-cc/CacheTokens.cpp index 8a6f1aa51b..6e693bbfe6 100644 --- a/tools/clang-cc/CacheTokens.cpp +++ b/tools/clang-cc/CacheTokens.cpp @@ -375,43 +375,12 @@ class VISIBILITY_HIDDEN PTHWriter { PTHEntry LexTokens(Lexer& L); Offset EmitCachedSpellings(); - /// StatListener - A simple "interpose" object used to monitor stat calls - /// invoked by FileManager while processing the original sources used - /// as input to PTH generation. StatListener populates the PTHWriter's - /// file map with stat information for directories as well as negative stats. - /// Stat information for files are populated elsewhere. - class StatListener : public StatSysCallCache { - PTHMap& PM; - public: - StatListener(PTHMap& pm) : PM(pm) {} - ~StatListener() {} - - int stat(const char *path, struct stat *buf) { - int result = ::stat(path, buf); - - if (result != 0) // Failed 'stat'. - PM.insert(path, PTHEntry()); - else if (S_ISDIR(buf->st_mode)) { - // Only cache directories with absolute paths. - if (!llvm::sys::Path(path).isAbsolute()) - return result; - - PM.insert(PTHEntryKeyVariant(buf, path), PTHEntry()); - } - - return result; - } - }; - public: PTHWriter(llvm::raw_fd_ostream& out, Preprocessor& pp) : Out(out), PP(pp), idcount(0), CurStrOffset(0) {} + PTHMap &getPM() { return PM; } void GeneratePTH(const std::string *MainFile = 0); - - StatSysCallCache *createStatListener() { - return new StatListener(PM); - } }; } // end anonymous namespace @@ -687,6 +656,37 @@ void PTHWriter::GeneratePTH(const std::string *MainFile) { Emit32(SpellingOff); } +namespace { +/// StatListener - A simple "interpose" object used to monitor stat calls +/// invoked by FileManager while processing the original sources used +/// as input to PTH generation. StatListener populates the PTHWriter's +/// file map with stat information for directories as well as negative stats. +/// Stat information for files are populated elsewhere. +class StatListener : public StatSysCallCache { + PTHMap ± +public: + StatListener(PTHMap &pm) : PM(pm) {} + ~StatListener() {} + + int stat(const char *path, struct stat *buf) { + int result = ::stat(path, buf); + + if (result != 0) // Failed 'stat'. + PM.insert(path, PTHEntry()); + else if (S_ISDIR(buf->st_mode)) { + // Only cache directories with absolute paths. + if (!llvm::sys::Path(path).isAbsolute()) + return result; + + PM.insert(PTHEntryKeyVariant(buf, path), PTHEntry()); + } + + return result; + } +}; +} // end anonymous namespace + + void clang::CacheTokens(Preprocessor &PP, const std::string &OutFile) { // Open up the PTH file. std::string ErrMsg; @@ -715,7 +715,7 @@ void clang::CacheTokens(Preprocessor &PP, const std::string &OutFile) { PTHWriter PW(Out, PP); // Install the 'stat' system call listener in the FileManager. - PP.getFileManager().setStatCache(PW.createStatListener()); + PP.getFileManager().setStatCache(new StatListener(PW.getPM())); // Lex through the entire file. This will populate SourceManager with // all of the header information. -- 2.40.0