diff options
| author | Guillaume Papin <guillaume.papin@epitech.eu> | 2013-07-24 14:24:33 +0000 |
|---|---|---|
| committer | Guillaume Papin <guillaume.papin@epitech.eu> | 2013-07-24 14:24:33 +0000 |
| commit | ebde78c4c6149dfd6dfcddd39ed07e5aec1860ed (patch) | |
| tree | f7f8d701fa318b856bb99c801f0b3e62ed33873d /clang-tools-extra/cpp11-migrate/Core/Transforms.cpp | |
| parent | 197af31aba9208e35b153d7f3caad8cc819d2ff2 (diff) | |
| download | bcm5719-llvm-ebde78c4c6149dfd6dfcddd39ed07e5aec1860ed.tar.gz bcm5719-llvm-ebde78c4c6149dfd6dfcddd39ed07e5aec1860ed.zip | |
cpp11-migrate: Register the transforms automatically using llvm::Registry
With this change each transform now register a factory. The factories are
registered using an llvm::Registry which makes them available globally.
llvm-svn: 187041
Diffstat (limited to 'clang-tools-extra/cpp11-migrate/Core/Transforms.cpp')
| -rw-r--r-- | clang-tools-extra/cpp11-migrate/Core/Transforms.cpp | 41 |
1 files changed, 22 insertions, 19 deletions
diff --git a/clang-tools-extra/cpp11-migrate/Core/Transforms.cpp b/clang-tools-extra/cpp11-migrate/Core/Transforms.cpp index e42baa4ca1e..d58e4c6af70 100644 --- a/clang-tools-extra/cpp11-migrate/Core/Transforms.cpp +++ b/clang-tools-extra/cpp11-migrate/Core/Transforms.cpp @@ -20,31 +20,34 @@ namespace cl = llvm::cl; static cl::OptionCategory TransformCategory("Transforms"); Transforms::~Transforms() { - for (std::vector<Transform*>::iterator I = ChosenTransforms.begin(), - E = ChosenTransforms.end(); I != E; ++I) { + for (std::vector<Transform *>::iterator I = ChosenTransforms.begin(), + E = ChosenTransforms.end(); + I != E; ++I) delete *I; - } - for (OptionVec::iterator I = Options.begin(), - E = Options.end(); I != E; ++I) { - delete I->first; - } + + for (OptionMap::iterator I = Options.begin(), E = Options.end(); I != E; ++I) + delete I->getValue(); } -void Transforms::registerTransform(llvm::StringRef OptName, - llvm::StringRef Description, - TransformCreator Creator) { - Options.push_back(OptionVec::value_type( - new cl::opt<bool>(OptName.data(), cl::desc(Description.data()), - cl::cat(TransformCategory)), - Creator)); +void Transforms::registerTransforms() { + for (TransformFactoryRegistry::iterator I = TransformFactoryRegistry::begin(), + E = TransformFactoryRegistry::end(); + I != E; ++I) + Options[I->getName()] = new cl::opt<bool>( + I->getName(), cl::desc(I->getDesc()), cl::cat(TransformCategory)); } void Transforms::createSelectedTransforms(const TransformOptions &GlobalOptions) { - for (OptionVec::iterator I = Options.begin(), - E = Options.end(); I != E; ++I) { - if (*I->first) { - ChosenTransforms.push_back(I->second(GlobalOptions)); - } + for (TransformFactoryRegistry::iterator I = TransformFactoryRegistry::begin(), + E = TransformFactoryRegistry::end(); + I != E; ++I) { + bool OptionEnabled = *Options[I->getName()]; + + if (!OptionEnabled) + continue; + + llvm::OwningPtr<TransformFactory> Factory(I->instantiate()); + ChosenTransforms.push_back(Factory->createTransform(GlobalOptions)); } } |

