Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===-- FileRemapper.h - File Remapping Helper ------------------*- C++ -*-===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8.  
  9. #ifndef LLVM_CLANG_ARCMIGRATE_FILEREMAPPER_H
  10. #define LLVM_CLANG_ARCMIGRATE_FILEREMAPPER_H
  11.  
  12. #include "clang/Basic/LLVM.h"
  13. #include "llvm/ADT/DenseMap.h"
  14. #include "llvm/ADT/PointerUnion.h"
  15. #include "llvm/ADT/STLExtras.h"
  16. #include "llvm/ADT/StringRef.h"
  17. #include <memory>
  18.  
  19. namespace llvm {
  20.   class MemoryBuffer;
  21.   class MemoryBufferRef;
  22. }
  23.  
  24. namespace clang {
  25.   class FileManager;
  26.   class FileEntry;
  27.   class DiagnosticsEngine;
  28.   class PreprocessorOptions;
  29.  
  30. namespace arcmt {
  31.  
  32. class FileRemapper {
  33.   // FIXME: Reuse the same FileManager for multiple ASTContexts.
  34.   std::unique_ptr<FileManager> FileMgr;
  35.  
  36.   typedef llvm::PointerUnion<const FileEntry *, llvm::MemoryBuffer *> Target;
  37.   typedef llvm::DenseMap<const FileEntry *, Target> MappingsTy;
  38.   MappingsTy FromToMappings;
  39.  
  40.   llvm::DenseMap<const FileEntry *, const FileEntry *> ToFromMappings;
  41.  
  42. public:
  43.   FileRemapper();
  44.   ~FileRemapper();
  45.  
  46.   bool initFromDisk(StringRef outputDir, DiagnosticsEngine &Diag,
  47.                     bool ignoreIfFilesChanged);
  48.   bool initFromFile(StringRef filePath, DiagnosticsEngine &Diag,
  49.                     bool ignoreIfFilesChanged);
  50.   bool flushToDisk(StringRef outputDir, DiagnosticsEngine &Diag);
  51.   bool flushToFile(StringRef outputPath, DiagnosticsEngine &Diag);
  52.  
  53.   bool overwriteOriginal(DiagnosticsEngine &Diag,
  54.                          StringRef outputDir = StringRef());
  55.  
  56.   void remap(StringRef filePath, std::unique_ptr<llvm::MemoryBuffer> memBuf);
  57.  
  58.   void applyMappings(PreprocessorOptions &PPOpts) const;
  59.  
  60.   /// Iterate through all the mappings.
  61.   void forEachMapping(
  62.       llvm::function_ref<void(StringRef, StringRef)> CaptureFile,
  63.       llvm::function_ref<void(StringRef, const llvm::MemoryBufferRef &)>
  64.           CaptureBuffer) const;
  65.  
  66.   void clear(StringRef outputDir = StringRef());
  67.  
  68. private:
  69.   void remap(const FileEntry *file, std::unique_ptr<llvm::MemoryBuffer> memBuf);
  70.   void remap(const FileEntry *file, const FileEntry *newfile);
  71.  
  72.   const FileEntry *getOriginalFile(StringRef filePath);
  73.   void resetTarget(Target &targ);
  74.  
  75.   bool report(const Twine &err, DiagnosticsEngine &Diag);
  76.  
  77.   std::string getRemapInfoFile(StringRef outputDir);
  78. };
  79.  
  80. } // end namespace arcmt
  81.  
  82. }  // end namespace clang
  83.  
  84. #endif
  85.