diff options
| author | Edwin Vane <edwin.vane@intel.com> | 2013-06-17 18:18:15 +0000 |
|---|---|---|
| committer | Edwin Vane <edwin.vane@intel.com> | 2013-06-17 18:18:15 +0000 |
| commit | 4e11abb59b44dc9eab2f50e6e29f16d3d029bda6 (patch) | |
| tree | c1d39bb0e772f9bb62a4987f8937a0779a59e4d9 /clang-tools-extra/unittests/cpp11-migrate | |
| parent | 862c4a06ee0cfb7662bdba9d8dbb853342975bbf (diff) | |
| download | bcm5719-llvm-4e11abb59b44dc9eab2f50e6e29f16d3d029bda6.tar.gz bcm5719-llvm-4e11abb59b44dc9eab2f50e6e29f16d3d029bda6.zip | |
cpp11-migrate: Transform now responsible for file content overriding
To better support per-translation unit replacements, any real work is being
moved out of ActionFactory and into Transform. In this revision, that means
file override application.
For simplification, Transform no longer inherits from SourceFileCallbacks.
TransformTest required updating as a result.
llvm-svn: 184098
Diffstat (limited to 'clang-tools-extra/unittests/cpp11-migrate')
| -rw-r--r-- | clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp | 41 |
1 files changed, 37 insertions, 4 deletions
diff --git a/clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp b/clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp index 2a5689898a4..eeadbf1ecba 100644 --- a/clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp +++ b/clang-tools-extra/unittests/cpp11-migrate/TransformTest.cpp @@ -2,6 +2,7 @@ #include "Core/Transform.h" #include "clang/AST/ASTConsumer.h" #include "clang/AST/DeclGroup.h" +#include "clang/Tooling/Tooling.h" #include "llvm/Support/Process.h" #include "llvm/Support/Path.h" #include "llvm/Support/PathV1.h" @@ -27,6 +28,11 @@ public: void setDeferredChanges(unsigned Changes) { Transform::setDeferredChanges(Changes); } + + void setOverrides(const FileOverrides &Overrides) { + Transform::setOverrides(Overrides); + } + }; TEST(Transform, Interface) { @@ -58,9 +64,9 @@ TEST(Transform, Interface) { ASSERT_TRUE(T.getChangesNotMade()); } -class FindTopLevelDeclConsumer : public ASTConsumer { +class TimePassingASTConsumer : public ASTConsumer { public: - FindTopLevelDeclConsumer(bool *Called) : Called(Called) {} + TimePassingASTConsumer(bool *Called) : Called(Called) {} virtual bool HandleTopLevelDecl(DeclGroupRef DeclGroup) { llvm::sys::TimeValue UserStart; @@ -83,11 +89,25 @@ public: struct ConsumerFactory { ASTConsumer *newASTConsumer() { - return new FindTopLevelDeclConsumer(&Called); + return new TimePassingASTConsumer(&Called); } bool Called; }; +struct CallbackForwarder : public clang::tooling::SourceFileCallbacks { + CallbackForwarder(Transform &Callee) : Callee(Callee) {} + + virtual bool handleBeginSource(CompilerInstance &CI, StringRef Filename) { + return Callee.handleBeginSource(CI, Filename); + } + + virtual void handleEndSource() { + Callee.handleEndSource(); + } + + Transform &Callee; +}; + TEST(Transform, Timings) { TransformOptions Options; Options.EnableTiming = true; @@ -115,8 +135,21 @@ TEST(Transform, Timings) { Tool.mapVirtualFile(FileAName, "void a() {}"); Tool.mapVirtualFile(FileBName, "void b() {}"); + // Factory to create TimePassingASTConsumer for each source file the tool + // runs on. ConsumerFactory Factory; - Tool.run(newFrontendActionFactory(&Factory, &T)); + + // We don't care about any of Transform's functionality except to get it to + // record timings. For that, we need to forward handleBeginSource() and + // handleEndSource() calls to it. + CallbackForwarder Callbacks(T); + + // Transform's handle* functions require FileOverrides to be set, even if + // there aren't any. + FileOverrides Overrides; + T.setOverrides(Overrides); + + Tool.run(clang::tooling::newFrontendActionFactory(&Factory, &Callbacks)); EXPECT_TRUE(Factory.Called); Transform::TimingVec::const_iterator I = T.timing_begin(); |

