summaryrefslogtreecommitdiffstats
path: root/clang/lib/Driver/ToolChain.cpp
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2013-03-19 00:36:57 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2013-03-19 00:36:57 +0000
commitd15a8918fb9c0d66f2ff081172fd49811a907952 (patch)
tree1be9bb39d06743bd5219277f811018615bdf9125 /clang/lib/Driver/ToolChain.cpp
parent7029ce1a0ce6bb88bebeb182376641d2c4a70bb0 (diff)
downloadbcm5719-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.cpp20
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))
OpenPOWER on IntegriCloud