Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

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

  1. //===- ExtractAPI/FrontendActions.h -----------------------------*- 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. /// \file
  10. /// This file defines the ExtractAPIAction frontend action.
  11. ///
  12. //===----------------------------------------------------------------------===//
  13.  
  14. #ifndef LLVM_CLANG_EXTRACTAPI_FRONTEND_ACTIONS_H
  15. #define LLVM_CLANG_EXTRACTAPI_FRONTEND_ACTIONS_H
  16.  
  17. #include "clang/ExtractAPI/API.h"
  18. #include "clang/ExtractAPI/APIIgnoresList.h"
  19. #include "clang/Frontend/FrontendAction.h"
  20.  
  21. namespace clang {
  22.  
  23. /// ExtractAPIAction sets up the output file and creates the ExtractAPIVisitor.
  24. class ExtractAPIAction : public ASTFrontendAction {
  25. protected:
  26.   std::unique_ptr<ASTConsumer> CreateASTConsumer(CompilerInstance &CI,
  27.                                                  StringRef InFile) override;
  28.  
  29. private:
  30.   /// A representation of the APIs this action extracts.
  31.   std::unique_ptr<extractapi::APISet> API;
  32.  
  33.   /// A stream to the output file of this action.
  34.   std::unique_ptr<raw_pwrite_stream> OS;
  35.  
  36.   /// The product this action is extracting API information for.
  37.   std::string ProductName;
  38.  
  39.   /// The synthesized input buffer that contains all the provided input header
  40.   /// files.
  41.   std::unique_ptr<llvm::MemoryBuffer> Buffer;
  42.  
  43.   /// The list of symbols to ignore during serialization
  44.   extractapi::APIIgnoresList IgnoresList;
  45.  
  46.   /// The input file originally provided on the command line.
  47.   ///
  48.   /// This captures the spelling used to include the file and whether the
  49.   /// include is quoted or not.
  50.   SmallVector<std::pair<SmallString<32>, bool>> KnownInputFiles;
  51.  
  52.   /// Prepare to execute the action on the given CompilerInstance.
  53.   ///
  54.   /// This is called before executing the action on any inputs. This generates a
  55.   /// single header that includes all of CI's inputs and replaces CI's input
  56.   /// list with it before actually executing the action.
  57.   bool PrepareToExecuteAction(CompilerInstance &CI) override;
  58.  
  59.   /// Called after executing the action on the synthesized input buffer.
  60.   ///
  61.   /// Note: Now that we have gathered all the API definitions to surface we can
  62.   /// emit them in this callback.
  63.   void EndSourceFileAction() override;
  64.  
  65.   static std::unique_ptr<llvm::raw_pwrite_stream>
  66.   CreateOutputFile(CompilerInstance &CI, StringRef InFile);
  67.  
  68.   static StringRef getInputBufferName() { return "<extract-api-includes>"; }
  69. };
  70.  
  71. } // namespace clang
  72.  
  73. #endif // LLVM_CLANG_EXTRACTAPI_FRONTEND_ACTIONS_H
  74.