1218893Sdim//===--- Action.cpp - Abstract compilation steps --------------------------===//
2193326Sed//
3193326Sed//                     The LLVM Compiler Infrastructure
4193326Sed//
5193326Sed// This file is distributed under the University of Illinois Open Source
6193326Sed// License. See LICENSE.TXT for details.
7193326Sed//
8193326Sed//===----------------------------------------------------------------------===//
9193326Sed
10193326Sed#include "clang/Driver/Action.h"
11226633Sdim#include "llvm/Support/ErrorHandling.h"
12193326Sed#include <cassert>
13193326Sedusing namespace clang::driver;
14263508Sdimusing namespace llvm::opt;
15193326Sed
16193326SedAction::~Action() {
17205219Srdivacky  if (OwnsInputs) {
18205219Srdivacky    for (iterator it = begin(), ie = end(); it != ie; ++it)
19205219Srdivacky      delete *it;
20205219Srdivacky  }
21193326Sed}
22193326Sed
23193326Sedconst char *Action::getClassName(ActionClass AC) {
24193326Sed  switch (AC) {
25193326Sed  case InputClass: return "input";
26193326Sed  case BindArchClass: return "bind-arch";
27193326Sed  case PreprocessJobClass: return "preprocessor";
28193326Sed  case PrecompileJobClass: return "precompiler";
29193326Sed  case AnalyzeJobClass: return "analyzer";
30234353Sdim  case MigrateJobClass: return "migrator";
31193326Sed  case CompileJobClass: return "compiler";
32193326Sed  case AssembleJobClass: return "assembler";
33193326Sed  case LinkJobClass: return "linker";
34193326Sed  case LipoJobClass: return "lipo";
35210299Sed  case DsymutilJobClass: return "dsymutil";
36226633Sdim  case VerifyJobClass: return "verify";
37193326Sed  }
38198092Srdivacky
39226633Sdim  llvm_unreachable("invalid class");
40193326Sed}
41193326Sed
42234353Sdimvoid InputAction::anchor() {}
43234353Sdim
44198092SrdivackyInputAction::InputAction(const Arg &_Input, types::ID _Type)
45193326Sed  : Action(InputClass, _Type), Input(_Input) {
46193326Sed}
47193326Sed
48234353Sdimvoid BindArchAction::anchor() {}
49234353Sdim
50198092SrdivackyBindArchAction::BindArchAction(Action *Input, const char *_ArchName)
51193326Sed  : Action(BindArchClass, Input, Input->getType()), ArchName(_ArchName) {
52193326Sed}
53193326Sed
54234353Sdimvoid JobAction::anchor() {}
55234353Sdim
56193326SedJobAction::JobAction(ActionClass Kind, Action *Input, types::ID Type)
57193326Sed  : Action(Kind, Input, Type) {
58193326Sed}
59193326Sed
60198092SrdivackyJobAction::JobAction(ActionClass Kind, const ActionList &Inputs, types::ID Type)
61193326Sed  : Action(Kind, Inputs, Type) {
62193326Sed}
63193326Sed
64234353Sdimvoid PreprocessJobAction::anchor() {}
65234353Sdim
66193326SedPreprocessJobAction::PreprocessJobAction(Action *Input, types::ID OutputType)
67193326Sed  : JobAction(PreprocessJobClass, Input, OutputType) {
68193326Sed}
69193326Sed
70234353Sdimvoid PrecompileJobAction::anchor() {}
71234353Sdim
72193326SedPrecompileJobAction::PrecompileJobAction(Action *Input, types::ID OutputType)
73193326Sed  : JobAction(PrecompileJobClass, Input, OutputType) {
74193326Sed}
75193326Sed
76234353Sdimvoid AnalyzeJobAction::anchor() {}
77234353Sdim
78193326SedAnalyzeJobAction::AnalyzeJobAction(Action *Input, types::ID OutputType)
79193326Sed  : JobAction(AnalyzeJobClass, Input, OutputType) {
80193326Sed}
81193326Sed
82234353Sdimvoid MigrateJobAction::anchor() {}
83234353Sdim
84234353SdimMigrateJobAction::MigrateJobAction(Action *Input, types::ID OutputType)
85234353Sdim  : JobAction(MigrateJobClass, Input, OutputType) {
86234353Sdim}
87234353Sdim
88234353Sdimvoid CompileJobAction::anchor() {}
89234353Sdim
90193326SedCompileJobAction::CompileJobAction(Action *Input, types::ID OutputType)
91193326Sed  : JobAction(CompileJobClass, Input, OutputType) {
92193326Sed}
93193326Sed
94234353Sdimvoid AssembleJobAction::anchor() {}
95234353Sdim
96193326SedAssembleJobAction::AssembleJobAction(Action *Input, types::ID OutputType)
97193326Sed  : JobAction(AssembleJobClass, Input, OutputType) {
98193326Sed}
99193326Sed
100234353Sdimvoid LinkJobAction::anchor() {}
101234353Sdim
102198092SrdivackyLinkJobAction::LinkJobAction(ActionList &Inputs, types::ID Type)
103193326Sed  : JobAction(LinkJobClass, Inputs, Type) {
104193326Sed}
105193326Sed
106234353Sdimvoid LipoJobAction::anchor() {}
107234353Sdim
108198092SrdivackyLipoJobAction::LipoJobAction(ActionList &Inputs, types::ID Type)
109193326Sed  : JobAction(LipoJobClass, Inputs, Type) {
110193326Sed}
111210299Sed
112234353Sdimvoid DsymutilJobAction::anchor() {}
113234353Sdim
114210299SedDsymutilJobAction::DsymutilJobAction(ActionList &Inputs, types::ID Type)
115210299Sed  : JobAction(DsymutilJobClass, Inputs, Type) {
116210299Sed}
117226633Sdim
118234353Sdimvoid VerifyJobAction::anchor() {}
119234353Sdim
120226633SdimVerifyJobAction::VerifyJobAction(ActionList &Inputs, types::ID Type)
121226633Sdim  : JobAction(VerifyJobClass, Inputs, Type) {
122226633Sdim}
123