//===-- Core/Transforms.h - class Transforms Def'n --------------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// /// /// \file /// \brief This file provides the definition for class Transforms which is /// responsible for defining the command-line arguments exposing /// transformations to the user and applying requested transforms. /// //===----------------------------------------------------------------------===// #ifndef CLANG_MODERNIZE_TRANSFORMS_H #define CLANG_MODERNIZE_TRANSFORMS_H #include "llvm/ADT/StringRef.h" #include "llvm/Support/CommandLine.h" #include // Forward declarations namespace llvm { namespace cl { class Option; } // namespace cl } // namespace llvm class Transform; struct TransformOptions; struct CompilerVersions; typedef Transform *(*TransformCreator)(const TransformOptions &); template Transform *ConstructTransform(const TransformOptions &Options) { return new T(Options); } /// \brief To group transforms together when printing the help. extern llvm::cl::OptionCategory TransformCategory; /// \brief Class encapsulating the creation of command line bool options /// for each transform and instantiating transforms chosen by the user. class Transforms { public: typedef std::vector TransformVec; typedef TransformVec::const_iterator const_iterator; public: ~Transforms(); /// \brief Registers all available transforms causing them to be made /// available on the command line. /// /// Be sure to register all transforms *before* parsing command line options. void registerTransforms(); /// \brief Instantiate all transforms that were selected on the command line. /// /// Call *after* parsing options. void createSelectedTransforms(const TransformOptions &Options, const CompilerVersions &RequiredVersions); /// \brief Return an iterator to the start of a container of instantiated /// transforms. const_iterator begin() const { return ChosenTransforms.begin(); } /// \brief Return an iterator to the end of a container of instantiated /// transforms. const_iterator end() const { return ChosenTransforms.end(); } private: bool hasAnyExplicitOption() const; typedef llvm::StringMap *> OptionMap; private: TransformVec ChosenTransforms; OptionMap Options; }; #endif // CLANG_MODERNIZE_TRANSFORMS_H