diff options
author | Rafael Espindola <rafael.espindola@gmail.com> | 2013-03-19 00:36:57 +0000 |
---|---|---|
committer | Rafael Espindola <rafael.espindola@gmail.com> | 2013-03-19 00:36:57 +0000 |
commit | d15a8918fb9c0d66f2ff081172fd49811a907952 (patch) | |
tree | 1be9bb39d06743bd5219277f811018615bdf9125 /clang/lib/Driver/ToolChain.cpp | |
parent | 7029ce1a0ce6bb88bebeb182376641d2c4a70bb0 (diff) | |
download | bcm5719-llvm-d15a8918fb9c0d66f2ff081172fd49811a907952.tar.gz bcm5719-llvm-d15a8918fb9c0d66f2ff081172fd49811a907952.zip |
Finish refactoring the tool selection logic.
The general pattern now is that Foobar::constructTool only creates tools
defined in the tools::foobar namespace and then delegates to the parent.
The remaining duplicated code is now in the tools themselves.
llvm-svn: 177368
Diffstat (limited to 'clang/lib/Driver/ToolChain.cpp')
-rw-r--r-- | clang/lib/Driver/ToolChain.cpp | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/clang/lib/Driver/ToolChain.cpp b/clang/lib/Driver/ToolChain.cpp index 5322a6dae2c..def3b3ddea9 100644 --- a/clang/lib/Driver/ToolChain.cpp +++ b/clang/lib/Driver/ToolChain.cpp @@ -63,6 +63,26 @@ bool ToolChain::IsUnwindTablesDefault() const { return false; } +Tool *ToolChain::constructTool(Action::ActionClass AC) const { + switch (AC) { + case Action::InputClass: + case Action::BindArchClass: + case Action::AssembleJobClass: + case Action::LinkJobClass: + case Action::LipoJobClass: + case Action::DsymutilJobClass: + case Action::VerifyJobClass: + llvm_unreachable("Invalid tool kind."); + + case Action::CompileJobClass: + case Action::PrecompileJobClass: + case Action::PreprocessJobClass: + case Action::AnalyzeJobClass: + case Action::MigrateJobClass: + return new tools::Clang(*this); + } +} + Tool &ToolChain::SelectTool(const JobAction &JA) const { Action::ActionClass Key; if (getDriver().ShouldUseClangCompiler(JA)) |