diff options
| author | Edwin Vane <edwin.vane@intel.com> | 2013-08-30 19:28:59 +0000 |
|---|---|---|
| committer | Edwin Vane <edwin.vane@intel.com> | 2013-08-30 19:28:59 +0000 |
| commit | 0acd502afe118a82f480d184271fe60e5551746f (patch) | |
| tree | 100dd06543c384a68e3ced4031e07340d4928cfa /clang-tools-extra/cpp11-migrate/LoopConvert | |
| parent | e600025528eaa1c43e5084bab219f8f467b4731e (diff) | |
| download | bcm5719-llvm-0acd502afe118a82f480d184271fe60e5551746f.tar.gz bcm5719-llvm-0acd502afe118a82f480d184271fe60e5551746f.zip | |
cpp11-migrate: Refactor for driver model of operation
Massive simplification of how replacements and file overrides are handled by
the migrator:
* Sources and headers are all treated the same.
* All replacements for a given translation unit are stored in the same
TranslationUnitReplacements structure.
* Change tracking is updated only from main file; no need for
propagating "is tracking" flag around.
* Transform base class no longer responsible for applying replacements.
They are simply stored and main() looks after deduplication and
application.
* Renamed -yaml-only to -serialize-replacements. Same restrictions apply:
Can only request one transform. New restriction: formatting cannot also
be turned on since it's basically a transform.
* If -serialize-replacements is requested, changes to files will not be
applied on disk.
* Changed behaviour of function generating names for serialized
replacements: Only the main source file goes into the name of the file
since a file may contain changes for multiple different files.
* Updated HeaderReplacements LIT test for new serialization behaviour.
* Replaced old test that ensures replacements are not serialized if
-serialize-replacements is not provided. New version ensures changes
are made directly to all files in the translation unit.
* Updated unit tests.
* Due to major simplification of structures in FileOverrides.h, the
FileOverridesTest is quite a bit simpler now.
Differential Revision: http://llvm-reviews.chandlerc.com/D1545
llvm-svn: 189689
Diffstat (limited to 'clang-tools-extra/cpp11-migrate/LoopConvert')
4 files changed, 24 insertions, 27 deletions
diff --git a/clang-tools-extra/cpp11-migrate/LoopConvert/LoopActions.cpp b/clang-tools-extra/cpp11-migrate/LoopConvert/LoopActions.cpp index da9d7b56557..0ba49d8ad4f 100644 --- a/clang-tools-extra/cpp11-migrate/LoopConvert/LoopActions.cpp +++ b/clang-tools-extra/cpp11-migrate/LoopConvert/LoopActions.cpp @@ -815,9 +815,9 @@ void LoopFixer::doConversion(ASTContext *Context, // the declaration of the alias variable. This is probably a bug. ReplacementText = ";"; - Replace->insert(Replacement(Context->getSourceManager(), - CharSourceRange::getTokenRange(ReplaceRange), - ReplacementText)); + Owner.addReplacementForCurrentTU(Replacement( + Context->getSourceManager(), + CharSourceRange::getTokenRange(ReplaceRange), ReplacementText)); // No further replacements are made to the loop, since the iterator or index // was used exactly once - in the initialization of AliasVar. } else { @@ -830,10 +830,9 @@ void LoopFixer::doConversion(ASTContext *Context, I != E; ++I) { std::string ReplaceText = I->IsArrow ? VarName + "." : VarName; ReplacedVarRanges->insert(std::make_pair(TheLoop, IndexVar)); - Replace->insert( + Owner.addReplacementForCurrentTU( Replacement(Context->getSourceManager(), - CharSourceRange::getTokenRange(I->Range), - ReplaceText)); + CharSourceRange::getTokenRange(I->Range), ReplaceText)); } } @@ -862,9 +861,9 @@ void LoopFixer::doConversion(ASTContext *Context, std::string TypeString = AutoRefType.getAsString(); std::string Range = ("(" + TypeString + " " + VarName + " : " + MaybeDereference + ContainerString + ")").str(); - Replace->insert(Replacement(Context->getSourceManager(), - CharSourceRange::getTokenRange(ParenRange), - Range)); + Owner.addReplacementForCurrentTU( + Replacement(Context->getSourceManager(), + CharSourceRange::getTokenRange(ParenRange), Range)); GeneratedDecls->insert(make_pair(TheLoop, VarName)); } diff --git a/clang-tools-extra/cpp11-migrate/LoopConvert/LoopActions.h b/clang-tools-extra/cpp11-migrate/LoopConvert/LoopActions.h index 95c1b021576..b72576bde82 100644 --- a/clang-tools-extra/cpp11-migrate/LoopConvert/LoopActions.h +++ b/clang-tools-extra/cpp11-migrate/LoopConvert/LoopActions.h @@ -41,12 +41,11 @@ enum LoopFixerKind { class LoopFixer : public clang::ast_matchers::MatchFinder::MatchCallback { public: LoopFixer(StmtAncestorASTVisitor *ParentFinder, - clang::tooling::Replacements *Replace, StmtGeneratedVarNameMap *GeneratedDecls, ReplacedVarsMap *ReplacedVarRanges, unsigned *AcceptedChanges, unsigned *DeferredChanges, unsigned *RejectedChanges, - RiskLevel MaxRisk, LoopFixerKind FixerKind, const Transform &Owner) - : ParentFinder(ParentFinder), Replace(Replace), + RiskLevel MaxRisk, LoopFixerKind FixerKind, Transform &Owner) + : ParentFinder(ParentFinder), GeneratedDecls(GeneratedDecls), ReplacedVarRanges(ReplacedVarRanges), AcceptedChanges(AcceptedChanges), DeferredChanges(DeferredChanges), RejectedChanges(RejectedChanges), MaxRisk(MaxRisk), @@ -57,7 +56,6 @@ class LoopFixer : public clang::ast_matchers::MatchFinder::MatchCallback { private: StmtAncestorASTVisitor *ParentFinder; - clang::tooling::Replacements *Replace; StmtGeneratedVarNameMap *GeneratedDecls; ReplacedVarsMap *ReplacedVarRanges; unsigned *AcceptedChanges; @@ -65,7 +63,7 @@ class LoopFixer : public clang::ast_matchers::MatchFinder::MatchCallback { unsigned *RejectedChanges; RiskLevel MaxRisk; LoopFixerKind FixerKind; - const Transform &Owner; + Transform &Owner; /// \brief Computes the changes needed to convert a given for loop, and /// applies it. diff --git a/clang-tools-extra/cpp11-migrate/LoopConvert/LoopConvert.cpp b/clang-tools-extra/cpp11-migrate/LoopConvert/LoopConvert.cpp index 73c2560e796..2dfa4562929 100644 --- a/clang-tools-extra/cpp11-migrate/LoopConvert/LoopConvert.cpp +++ b/clang-tools-extra/cpp11-migrate/LoopConvert/LoopConvert.cpp @@ -24,7 +24,7 @@ using clang::ast_matchers::MatchFinder; using namespace clang::tooling; using namespace clang; -int LoopConvertTransform::apply(FileOverrides &InputStates, +int LoopConvertTransform::apply(const FileOverrides &InputStates, const CompilationDatabase &Database, const std::vector<std::string> &SourcePaths) { ClangTool LoopTool(Database, SourcePaths); @@ -37,20 +37,20 @@ int LoopConvertTransform::apply(FileOverrides &InputStates, unsigned RejectedChanges = 0; MatchFinder Finder; - LoopFixer ArrayLoopFixer(&ParentFinder, &getReplacements(), &GeneratedDecls, - &ReplacedVars, &AcceptedChanges, &DeferredChanges, - &RejectedChanges, Options().MaxRiskLevel, LFK_Array, + LoopFixer ArrayLoopFixer(&ParentFinder, &GeneratedDecls, &ReplacedVars, + &AcceptedChanges, &DeferredChanges, &RejectedChanges, + Options().MaxRiskLevel, LFK_Array, /*Owner=*/ *this); Finder.addMatcher(makeArrayLoopMatcher(), &ArrayLoopFixer); - LoopFixer IteratorLoopFixer( - &ParentFinder, &getReplacements(), &GeneratedDecls, &ReplacedVars, - &AcceptedChanges, &DeferredChanges, &RejectedChanges, - Options().MaxRiskLevel, LFK_Iterator, /*Owner=*/ *this); + LoopFixer IteratorLoopFixer(&ParentFinder, &GeneratedDecls, &ReplacedVars, + &AcceptedChanges, &DeferredChanges, + &RejectedChanges, Options().MaxRiskLevel, + LFK_Iterator, /*Owner=*/ *this); Finder.addMatcher(makeIteratorLoopMatcher(), &IteratorLoopFixer); - LoopFixer PseudoarrrayLoopFixer( - &ParentFinder, &getReplacements(), &GeneratedDecls, &ReplacedVars, - &AcceptedChanges, &DeferredChanges, &RejectedChanges, - Options().MaxRiskLevel, LFK_PseudoArray, /*Owner=*/ *this); + LoopFixer PseudoarrrayLoopFixer(&ParentFinder, &GeneratedDecls, &ReplacedVars, + &AcceptedChanges, &DeferredChanges, + &RejectedChanges, Options().MaxRiskLevel, + LFK_PseudoArray, /*Owner=*/ *this); Finder.addMatcher(makePseudoArrayLoopMatcher(), &PseudoarrrayLoopFixer); setOverrides(InputStates); diff --git a/clang-tools-extra/cpp11-migrate/LoopConvert/LoopConvert.h b/clang-tools-extra/cpp11-migrate/LoopConvert/LoopConvert.h index af287652485..b45d9555b3d 100644 --- a/clang-tools-extra/cpp11-migrate/LoopConvert/LoopConvert.h +++ b/clang-tools-extra/cpp11-migrate/LoopConvert/LoopConvert.h @@ -28,7 +28,7 @@ public: : Transform("LoopConvert", Options) {} /// \see Transform::run(). - virtual int apply(FileOverrides &InputStates, + virtual int apply(const FileOverrides &InputStates, const clang::tooling::CompilationDatabase &Database, const std::vector<std::string> &SourcePaths) LLVM_OVERRIDE; }; |

