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;
14193326Sed
15193326SedAction::~Action() {
16205219Srdivacky  if (OwnsInputs) {
17205219Srdivacky    for (iterator it = begin(), ie = end(); it != ie; ++it)
18205219Srdivacky      delete *it;
19205219Srdivacky  }
20193326Sed}
21193326Sed
22193326Sedconst char *Action::getClassName(ActionClass AC) {
23193326Sed  switch (AC) {
24193326Sed  case InputClass: return "input";
25193326Sed  case BindArchClass: return "bind-arch";
26193326Sed  case PreprocessJobClass: return "preprocessor";
27193326Sed  case PrecompileJobClass: return "precompiler";
28193326Sed  case AnalyzeJobClass: return "analyzer";
29234353Sdim  case MigrateJobClass: return "migrator";
30193326Sed  case CompileJobClass: return "compiler";
31193326Sed  case AssembleJobClass: return "assembler";
32193326Sed  case LinkJobClass: return "linker";
33193326Sed  case LipoJobClass: return "lipo";
34210299Sed  case DsymutilJobClass: return "dsymutil";
35226633Sdim  case VerifyJobClass: return "verify";
36193326Sed  }
37198092Srdivacky
38226633Sdim  llvm_unreachable("invalid class");
39193326Sed}
40193326Sed
41234353Sdimvoid InputAction::anchor() {}
42234353Sdim
43198092SrdivackyInputAction::InputAction(const Arg &_Input, types::ID _Type)
44193326Sed  : Action(InputClass, _Type), Input(_Input) {
45193326Sed}
46193326Sed
47234353Sdimvoid BindArchAction::anchor() {}
48234353Sdim
49198092SrdivackyBindArchAction::BindArchAction(Action *Input, const char *_ArchName)
50193326Sed  : Action(BindArchClass, Input, Input->getType()), ArchName(_ArchName) {
51193326Sed}
52193326Sed
53234353Sdimvoid JobAction::anchor() {}
54234353Sdim
55193326SedJobAction::JobAction(ActionClass Kind, Action *Input, types::ID Type)
56193326Sed  : Action(Kind, Input, Type) {
57193326Sed}
58193326Sed
59198092SrdivackyJobAction::JobAction(ActionClass Kind, const ActionList &Inputs, types::ID Type)
60193326Sed  : Action(Kind, Inputs, Type) {
61193326Sed}
62193326Sed
63234353Sdimvoid PreprocessJobAction::anchor() {}
64234353Sdim
65193326SedPreprocessJobAction::PreprocessJobAction(Action *Input, types::ID OutputType)
66193326Sed  : JobAction(PreprocessJobClass, Input, OutputType) {
67193326Sed}
68193326Sed
69234353Sdimvoid PrecompileJobAction::anchor() {}
70234353Sdim
71193326SedPrecompileJobAction::PrecompileJobAction(Action *Input, types::ID OutputType)
72193326Sed  : JobAction(PrecompileJobClass, Input, OutputType) {
73193326Sed}
74193326Sed
75234353Sdimvoid AnalyzeJobAction::anchor() {}
76234353Sdim
77193326SedAnalyzeJobAction::AnalyzeJobAction(Action *Input, types::ID OutputType)
78193326Sed  : JobAction(AnalyzeJobClass, Input, OutputType) {
79193326Sed}
80193326Sed
81234353Sdimvoid MigrateJobAction::anchor() {}
82234353Sdim
83234353SdimMigrateJobAction::MigrateJobAction(Action *Input, types::ID OutputType)
84234353Sdim  : JobAction(MigrateJobClass, Input, OutputType) {
85234353Sdim}
86234353Sdim
87234353Sdimvoid CompileJobAction::anchor() {}
88234353Sdim
89193326SedCompileJobAction::CompileJobAction(Action *Input, types::ID OutputType)
90193326Sed  : JobAction(CompileJobClass, Input, OutputType) {
91193326Sed}
92193326Sed
93234353Sdimvoid AssembleJobAction::anchor() {}
94234353Sdim
95193326SedAssembleJobAction::AssembleJobAction(Action *Input, types::ID OutputType)
96193326Sed  : JobAction(AssembleJobClass, Input, OutputType) {
97193326Sed}
98193326Sed
99234353Sdimvoid LinkJobAction::anchor() {}
100234353Sdim
101198092SrdivackyLinkJobAction::LinkJobAction(ActionList &Inputs, types::ID Type)
102193326Sed  : JobAction(LinkJobClass, Inputs, Type) {
103193326Sed}
104193326Sed
105234353Sdimvoid LipoJobAction::anchor() {}
106234353Sdim
107198092SrdivackyLipoJobAction::LipoJobAction(ActionList &Inputs, types::ID Type)
108193326Sed  : JobAction(LipoJobClass, Inputs, Type) {
109193326Sed}
110210299Sed
111234353Sdimvoid DsymutilJobAction::anchor() {}
112234353Sdim
113210299SedDsymutilJobAction::DsymutilJobAction(ActionList &Inputs, types::ID Type)
114210299Sed  : JobAction(DsymutilJobClass, Inputs, Type) {
115210299Sed}
116226633Sdim
117234353Sdimvoid VerifyJobAction::anchor() {}
118234353Sdim
119226633SdimVerifyJobAction::VerifyJobAction(ActionList &Inputs, types::ID Type)
120226633Sdim  : JobAction(VerifyJobClass, Inputs, Type) {
121226633Sdim}
122