summaryrefslogtreecommitdiffstats
path: root/clang-tools-extra/clang-modernize/UseAuto/UseAuto.cpp
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2013-09-04 17:35:07 +0000
committerChandler Carruth <chandlerc@gmail.com>2013-09-04 17:35:07 +0000
commitd9063c46f59f4bec47bcbeddca8ca2f789348c03 (patch)
tree76505542df7a05016dc71ffe44ed3ba264fb54be /clang-tools-extra/clang-modernize/UseAuto/UseAuto.cpp
parent6a23d212897d5402035cfaea82260f6dae1c8f2a (diff)
downloadbcm5719-llvm-d9063c46f59f4bec47bcbeddca8ca2f789348c03.tar.gz
bcm5719-llvm-d9063c46f59f4bec47bcbeddca8ca2f789348c03.zip
Rename cpp11-migrate to clang-modernize.
There is no reason to expect this tool to be limited to C++11, it seems very likely to be of on-going interest. It seems likely to be useful for modernizing even as new libraries come out in TSes and other formats than a complete standard. Fundamentally, we need something a bit more general. After some discussion on the list, going with 'clang-modernize'. I've tried to do a reasonably comprehensive job of fixing up the names, but I may still have missed some. Feel free to poke me if you spot any fallout here. Things I've tried reasonably hard to find and fix: - cpp11-migrate -> clang-modernize - Migrator -> Modernizer - Clean up the introductory documentation that was C++11 specific. I'll also point out that this tool continues to delight me. =] Also, a huge thanks to those who have so carefully, thoroughly documented the tool. The docs here are simply phenomenal. Every tool should be this well documented. I hope I have updated the documentation reasonably well, but I'm not very good at documentation, so review much appreciated. llvm-svn: 189960
Diffstat (limited to 'clang-tools-extra/clang-modernize/UseAuto/UseAuto.cpp')
-rw-r--r--clang-tools-extra/clang-modernize/UseAuto/UseAuto.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-modernize/UseAuto/UseAuto.cpp b/clang-tools-extra/clang-modernize/UseAuto/UseAuto.cpp
new file mode 100644
index 00000000000..72f5ae077f2
--- /dev/null
+++ b/clang-tools-extra/clang-modernize/UseAuto/UseAuto.cpp
@@ -0,0 +1,71 @@
+//===-- UseAuto/UseAuto.cpp - Use auto type specifier ---------------------===//
+//
+// 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 implementation of the UseAutoTransform class.
+///
+//===----------------------------------------------------------------------===//
+
+#include "UseAuto.h"
+#include "UseAutoActions.h"
+#include "UseAutoMatchers.h"
+
+using clang::ast_matchers::MatchFinder;
+using namespace clang;
+using namespace clang::tooling;
+
+int UseAutoTransform::apply(const FileOverrides &InputStates,
+ const clang::tooling::CompilationDatabase &Database,
+ const std::vector<std::string> &SourcePaths) {
+ ClangTool UseAutoTool(Database, SourcePaths);
+
+ unsigned AcceptedChanges = 0;
+
+ MatchFinder Finder;
+ ReplacementsVec Replaces;
+ IteratorReplacer ReplaceIterators(AcceptedChanges, Options().MaxRiskLevel,
+ /*Owner=*/ *this);
+ NewReplacer ReplaceNew(AcceptedChanges, Options().MaxRiskLevel,
+ /*Owner=*/ *this);
+
+ Finder.addMatcher(makeIteratorDeclMatcher(), &ReplaceIterators);
+ Finder.addMatcher(makeDeclWithNewMatcher(), &ReplaceNew);
+
+ setOverrides(InputStates);
+
+ if (int Result = UseAutoTool.run(createActionFactory(Finder))) {
+ llvm::errs() << "Error encountered during translation.\n";
+ return Result;
+ }
+
+ setAcceptedChanges(AcceptedChanges);
+
+ return 0;
+}
+
+struct UseAutoFactory : TransformFactory {
+ UseAutoFactory() {
+ Since.Clang = Version(2, 9);
+ Since.Gcc = Version(4, 4);
+ Since.Icc = Version(12);
+ Since.Msvc = Version(10);
+ }
+
+ Transform *createTransform(const TransformOptions &Opts) LLVM_OVERRIDE {
+ return new UseAutoTransform(Opts);
+ }
+};
+
+// Register the factory using this statically initialized variable.
+static TransformFactoryRegistry::Add<UseAutoFactory>
+X("use-auto", "Use of 'auto' type specifier");
+
+// This anchor is used to force the linker to link in the generated object file
+// and thus register the factory.
+volatile int UseAutoTransformAnchorSource = 0;
OpenPOWER on IntegriCloud