move StatListener out to top level.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67886 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/include/clang/Basic/FileManager.h b/include/clang/Basic/FileManager.h
index 6aa8862..a8ed870 100644
--- a/include/clang/Basic/FileManager.h
+++ b/include/clang/Basic/FileManager.h
@@ -126,7 +126,9 @@
/// 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 8a6f1aa..6e693bb 100644
--- a/tools/clang-cc/CacheTokens.cpp
+++ b/tools/clang-cc/CacheTokens.cpp
@@ -375,43 +375,12 @@
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 @@
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 @@
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.