]> granicus.if.org Git - clang/commitdiff
move StatListener out to top level.
authorChris Lattner <sabre@nondot.org>
Sat, 28 Mar 2009 00:55:35 +0000 (00:55 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 28 Mar 2009 00:55:35 +0000 (00:55 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67886 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/Basic/FileManager.h
tools/clang-cc/CacheTokens.cpp

index 6aa88629ce9289d8d98978558bf4656c5dff70b0..a8ed87011fff6a43df787f65a918bbb8d754641d 100644 (file)
@@ -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.
index 8a6f1aa51b435e20219c91795a6fe87f44cf82d1..6e693bbfe6bf8fc91be8e8d29252cd77cd8e1c31 100644 (file)
@@ -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 &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;
+  }
+};
+} // 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.