summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/cpp11-migrate/Core/Transforms.cpp
diff options
context:
space:
mode:
authorGuillaume Papin <guillaume.papin@epitech.eu>2013-07-24 14:24:33 +0000
committerGuillaume Papin <guillaume.papin@epitech.eu>2013-07-24 14:24:33 +0000
commitebde78c4c6149dfd6dfcddd39ed07e5aec1860ed (patch)
treef7f8d701fa318b856bb99c801f0b3e62ed33873d /clang-tools-extra/cpp11-migrate/Core/Transforms.cpp
parent197af31aba9208e35b153d7f3caad8cc819d2ff2 (diff)
downloadbcm5719-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.cpp41
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));
}
}
OpenPOWER on IntegriCloud