diff options
author | Nico Weber <nicolasweber@gmx.de> | 2012-08-30 02:02:19 +0000 |
---|---|---|
committer | Nico Weber <nicolasweber@gmx.de> | 2012-08-30 02:02:19 +0000 |
commit | 077a53e5ab1d8e194aa02d7ca2ce3f646af0be9f (patch) | |
tree | 630c1ffbfb60c36423f2850e16ee5eb672a5af13 | |
parent | 14c8a051cae8e15920825a3c061522f8d224e254 (diff) | |
download | bcm5719-llvm-077a53e5ab1d8e194aa02d7ca2ce3f646af0be9f.tar.gz bcm5719-llvm-077a53e5ab1d8e194aa02d7ca2ce3f646af0be9f.zip |
Tooling: Add a runToolOnCodeWithArgs() function that allows
passing additional parameters to a tool.
Use this to fix a FIXME in testing code.
llvm-svn: 162889
-rw-r--r-- | clang/include/clang/Tooling/Tooling.h | 13 | ||||
-rw-r--r-- | clang/lib/Tooling/Tooling.cpp | 21 | ||||
-rw-r--r-- | clang/unittests/Tooling/TestVisitor.h | 9 |
3 files changed, 32 insertions, 11 deletions
diff --git a/clang/include/clang/Tooling/Tooling.h b/clang/include/clang/Tooling/Tooling.h index e06705f0279..5337a4fa01d 100644 --- a/clang/include/clang/Tooling/Tooling.h +++ b/clang/include/clang/Tooling/Tooling.h @@ -99,6 +99,19 @@ inline FrontendActionFactory *newFrontendActionFactory( bool runToolOnCode(clang::FrontendAction *ToolAction, const Twine &Code, const Twine &FileName = "input.cc"); +/// \brief Runs (and deletes) the tool on 'Code' with the -fsyntax-only flag and +/// with additional other flags. +/// +/// \param ToolAction The action to run over the code. +/// \param Code C++ code. +/// \param Args Additional flags to pass on. +/// \param FileName The file name which 'Code' will be mapped as. +/// +/// \return - True if 'ToolAction' was successfully executed. +bool runToolOnCodeWithArgs(clang::FrontendAction *ToolAction, const Twine &Code, + const std::vector<std::string> &Args, + const Twine &FileName = "input.cc"); + /// \brief Utility to run a FrontendAction in a single clang invocation. class ToolInvocation { public: diff --git a/clang/lib/Tooling/Tooling.cpp b/clang/lib/Tooling/Tooling.cpp index e93e0c97f71..0e91c0617de 100644 --- a/clang/lib/Tooling/Tooling.cpp +++ b/clang/lib/Tooling/Tooling.cpp @@ -97,17 +97,22 @@ static clang::CompilerInvocation *newInvocation( bool runToolOnCode(clang::FrontendAction *ToolAction, const Twine &Code, const Twine &FileName) { + return runToolOnCodeWithArgs( + ToolAction, Code, std::vector<std::string>(), FileName); +} + +bool runToolOnCodeWithArgs(clang::FrontendAction *ToolAction, const Twine &Code, + const std::vector<std::string> &Args, + const Twine &FileName) { SmallString<16> FileNameStorage; StringRef FileNameRef = FileName.toNullTerminatedStringRef(FileNameStorage); - const char *const CommandLine[] = { - "clang-tool", "-fsyntax-only", FileNameRef.data() - }; + std::vector<std::string> Commands; + Commands.push_back("clang-tool"); + Commands.push_back("-fsyntax-only"); + Commands.insert(Commands.end(), Args.begin(), Args.end()); + Commands.push_back(FileNameRef.data()); FileManager Files((FileSystemOptions())); - ToolInvocation Invocation( - std::vector<std::string>( - CommandLine, - CommandLine + llvm::array_lengthof(CommandLine)), - ToolAction, &Files); + ToolInvocation Invocation(Commands, ToolAction, &Files); SmallString<1024> CodeStorage; Invocation.mapVirtualFile(FileNameRef, diff --git a/clang/unittests/Tooling/TestVisitor.h b/clang/unittests/Tooling/TestVisitor.h index 44ae63a8f55..8333c24a688 100644 --- a/clang/unittests/Tooling/TestVisitor.h +++ b/clang/unittests/Tooling/TestVisitor.h @@ -44,9 +44,12 @@ public: /// \brief Runs the current AST visitor over the given code. bool runOver(StringRef Code, Language L = Lang_CXX) { - // FIXME: The input language is determined based on the provided filename. - static const StringRef Filenames[] = { "input.c", "input.cc" }; - return tooling::runToolOnCode(CreateTestAction(), Code, Filenames[L]); + std::vector<std::string> Args; + switch (L) { + case Lang_C: Args.push_back("-std=c99"); break; + case Lang_CXX: Args.push_back("-std=c++98"); break; + } + return tooling::runToolOnCodeWithArgs(CreateTestAction(), Code, Args); } bool shouldVisitTemplateInstantiations() const { |