diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2013-09-04 17:35:07 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2013-09-04 17:35:07 +0000 |
commit | d9063c46f59f4bec47bcbeddca8ca2f789348c03 (patch) | |
tree | 76505542df7a05016dc71ffe44ed3ba264fb54be /clang-tools-extra/clang-modernize/UseAuto/UseAuto.cpp | |
parent | 6a23d212897d5402035cfaea82260f6dae1c8f2a (diff) | |
download | bcm5719-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.cpp | 71 |
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; |