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"
11226890Sdim#include "llvm/Support/ErrorHandling.h"
12193326Sed#include <cassert>
13193326Sedusing namespace clang::driver;
14263509Sdimusing 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";
30235633Sdim  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";
36226890Sdim  case VerifyJobClass: return "verify";
37193326Sed  }
38198092Srdivacky
39226890Sdim  llvm_unreachable("invalid class");
40193326Sed}
41193326Sed
42235633Sdimvoid InputAction::anchor() {}
43235633Sdim
44198092SrdivackyInputAction::InputAction(const Arg &_Input, types::ID _Type)
45193326Sed  : Action(InputClass, _Type), Input(_Input) {
46193326Sed}
47193326Sed
48235633Sdimvoid BindArchAction::anchor() {}
49235633Sdim
50198092SrdivackyBindArchAction::BindArchAction(Action *Input, const char *_ArchName)
51193326Sed  : Action(BindArchClass, Input, Input->getType()), ArchName(_ArchName) {
52193326Sed}
53193326Sed
54235633Sdimvoid JobAction::anchor() {}
55235633Sdim
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
64235633Sdimvoid PreprocessJobAction::anchor() {}
65235633Sdim
66193326SedPreprocessJobAction::PreprocessJobAction(Action *Input, types::ID OutputType)
67193326Sed  : JobAction(PreprocessJobClass, Input, OutputType) {
68193326Sed}
69193326Sed
70235633Sdimvoid PrecompileJobAction::anchor() {}
71235633Sdim
72193326SedPrecompileJobAction::PrecompileJobAction(Action *Input, types::ID OutputType)
73193326Sed  : JobAction(PrecompileJobClass, Input, OutputType) {
74193326Sed}
75193326Sed
76235633Sdimvoid AnalyzeJobAction::anchor() {}
77235633Sdim
78193326SedAnalyzeJobAction::AnalyzeJobAction(Action *Input, types::ID OutputType)
79193326Sed  : JobAction(AnalyzeJobClass, Input, OutputType) {
80193326Sed}
81193326Sed
82235633Sdimvoid MigrateJobAction::anchor() {}
83235633Sdim
84235633SdimMigrateJobAction::MigrateJobAction(Action *Input, types::ID OutputType)
85235633Sdim  : JobAction(MigrateJobClass, Input, OutputType) {
86235633Sdim}
87235633Sdim
88235633Sdimvoid CompileJobAction::anchor() {}
89235633Sdim
90193326SedCompileJobAction::CompileJobAction(Action *Input, types::ID OutputType)
91193326Sed  : JobAction(CompileJobClass, Input, OutputType) {
92193326Sed}
93193326Sed
94235633Sdimvoid AssembleJobAction::anchor() {}
95235633Sdim
96193326SedAssembleJobAction::AssembleJobAction(Action *Input, types::ID OutputType)
97193326Sed  : JobAction(AssembleJobClass, Input, OutputType) {
98193326Sed}
99193326Sed
100235633Sdimvoid LinkJobAction::anchor() {}
101235633Sdim
102198092SrdivackyLinkJobAction::LinkJobAction(ActionList &Inputs, types::ID Type)
103193326Sed  : JobAction(LinkJobClass, Inputs, Type) {
104193326Sed}
105193326Sed
106235633Sdimvoid LipoJobAction::anchor() {}
107235633Sdim
108198092SrdivackyLipoJobAction::LipoJobAction(ActionList &Inputs, types::ID Type)
109193326Sed  : JobAction(LipoJobClass, Inputs, Type) {
110193326Sed}
111210299Sed
112235633Sdimvoid DsymutilJobAction::anchor() {}
113235633Sdim
114210299SedDsymutilJobAction::DsymutilJobAction(ActionList &Inputs, types::ID Type)
115210299Sed  : JobAction(DsymutilJobClass, Inputs, Type) {
116210299Sed}
117226890Sdim
118235633Sdimvoid VerifyJobAction::anchor() {}
119235633Sdim
120226890SdimVerifyJobAction::VerifyJobAction(ActionList &Inputs, types::ID Type)
121226890Sdim  : JobAction(VerifyJobClass, Inputs, Type) {
122226890Sdim}
123