//===-- FrontendAction.h - Generic Frontend Action Interface ----*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// /// /// \file /// Defines the clang::FrontendAction interface and various convenience /// abstract classes (clang::ASTFrontendAction, clang::PluginASTAction, /// clang::PreprocessorFrontendAction, and clang::WrapperFrontendAction) /// derived from it. /// //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_FRONTEND_FRONTENDACTION_H #define LLVM_CLANG_FRONTEND_FRONTENDACTION_H #include "clang/AST/ASTConsumer.h" #include "clang/Basic/LLVM.h" #include "clang/Basic/LangOptions.h" #include "clang/Frontend/ASTUnit.h" #include "clang/Frontend/FrontendOptions.h" #include "llvm/ADT/StringRef.h" #include "llvm/Support/Error.h" #include <memory> #include <string> #include <vector> namespace clang { class ASTMergeAction; class CompilerInstance; /// Abstract base class for actions which can be performed by the frontend. class FrontendAction { … }; /// Abstract base class to use for AST consumer-based frontend actions. class ASTFrontendAction : public FrontendAction { … }; class PluginASTAction : public ASTFrontendAction { … }; /// Abstract base class to use for preprocessor-based frontend actions. class PreprocessorFrontendAction : public FrontendAction { … }; /// A frontend action which simply wraps some other runtime-specified /// frontend action. /// /// Deriving from this class allows an action to inject custom logic around /// some existing action's behavior. It implements every virtual method in /// the FrontendAction interface by forwarding to the wrapped action. class WrapperFrontendAction : public FrontendAction { … }; } // end namespace clang #endif