//===- PluginsOrder.cpp ---------------------------------------------------===// // // 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 // //===----------------------------------------------------------------------===// #include "clang/AST/AST.h" #include "clang/AST/ASTConsumer.h" #include "clang/Frontend/FrontendPluginRegistry.h" using namespace clang; namespace { class AlwaysBeforeConsumer : public ASTConsumer { public: void HandleTranslationUnit(ASTContext &) override { llvm::errs() << "always-before\n"; } }; class AlwaysBeforeAction : public PluginASTAction { public: std::unique_ptr CreateASTConsumer(CompilerInstance &CI, llvm::StringRef) override { return std::make_unique(); } bool ParseArgs(const CompilerInstance &CI, const std::vector &args) override { return true; } PluginASTAction::ActionType getActionType() override { return AddBeforeMainAction; } }; class AlwaysAfterConsumer : public ASTConsumer { public: void HandleTranslationUnit(ASTContext &) override { llvm::errs() << "always-after\n"; } }; class AlwaysAfterAction : public PluginASTAction { public: std::unique_ptr CreateASTConsumer(CompilerInstance &CI, llvm::StringRef) override { return std::make_unique(); } bool ParseArgs(const CompilerInstance &CI, const std::vector &args) override { return true; } PluginASTAction::ActionType getActionType() override { return AddAfterMainAction; } }; class CmdAfterConsumer : public ASTConsumer { public: void HandleTranslationUnit(ASTContext &) override { llvm::errs() << "cmd-after\n"; } }; class CmdAfterAction : public PluginASTAction { public: std::unique_ptr CreateASTConsumer(CompilerInstance &CI, llvm::StringRef) override { return std::make_unique(); } bool ParseArgs(const CompilerInstance &CI, const std::vector &args) override { return true; } PluginASTAction::ActionType getActionType() override { return CmdlineAfterMainAction; } }; class CmdBeforeConsumer : public ASTConsumer { public: void HandleTranslationUnit(ASTContext &) override { llvm::errs() << "cmd-before\n"; } }; class CmdBeforeAction : public PluginASTAction { public: std::unique_ptr CreateASTConsumer(CompilerInstance &CI, llvm::StringRef) override { return std::make_unique(); } bool ParseArgs(const CompilerInstance &CI, const std::vector &args) override { return true; } PluginASTAction::ActionType getActionType() override { return CmdlineBeforeMainAction; } }; } // namespace static FrontendPluginRegistry::Add X1("cmd-before", ""); static FrontendPluginRegistry::Add X2("cmd-after", ""); static FrontendPluginRegistry::Add X3("always-before", ""); static FrontendPluginRegistry::Add X4("always-after", "");