Action.cpp revision 263508
1169240Sjfv//===--- Action.cpp - Abstract compilation steps --------------------------===//
2169240Sjfv//
3169240Sjfv//                     The LLVM Compiler Infrastructure
4169240Sjfv//
5169240Sjfv// This file is distributed under the University of Illinois Open Source
6169240Sjfv// License. See LICENSE.TXT for details.
7169240Sjfv//
8169240Sjfv//===----------------------------------------------------------------------===//
9169240Sjfv
10169240Sjfv#include "clang/Driver/Action.h"
11169240Sjfv#include "llvm/Support/ErrorHandling.h"
12169240Sjfv#include <cassert>
13169240Sjfvusing namespace clang::driver;
14169240Sjfvusing namespace llvm::opt;
15169240Sjfv
16169240SjfvAction::~Action() {
17169240Sjfv  if (OwnsInputs) {
18169240Sjfv    for (iterator it = begin(), ie = end(); it != ie; ++it)
19169240Sjfv      delete *it;
20169240Sjfv  }
21169240Sjfv}
22169240Sjfv
23169240Sjfvconst char *Action::getClassName(ActionClass AC) {
24169240Sjfv  switch (AC) {
25169240Sjfv  case InputClass: return "input";
26169240Sjfv  case BindArchClass: return "bind-arch";
27169240Sjfv  case PreprocessJobClass: return "preprocessor";
28169240Sjfv  case PrecompileJobClass: return "precompiler";
29169240Sjfv  case AnalyzeJobClass: return "analyzer";
30169240Sjfv  case MigrateJobClass: return "migrator";
31169240Sjfv  case CompileJobClass: return "compiler";
32169240Sjfv  case AssembleJobClass: return "assembler";
33173788Sjfv  case LinkJobClass: return "linker";
34169240Sjfv  case LipoJobClass: return "lipo";
35169240Sjfv  case DsymutilJobClass: return "dsymutil";
36169589Sjfv  case VerifyJobClass: return "verify";
37169240Sjfv  }
38169240Sjfv
39169240Sjfv  llvm_unreachable("invalid class");
40169240Sjfv}
41169240Sjfv
42169240Sjfvvoid InputAction::anchor() {}
43169240Sjfv
44169240SjfvInputAction::InputAction(const Arg &_Input, types::ID _Type)
45169240Sjfv  : Action(InputClass, _Type), Input(_Input) {
46169240Sjfv}
47169240Sjfv
48169240Sjfvvoid BindArchAction::anchor() {}
49169240Sjfv
50169240SjfvBindArchAction::BindArchAction(Action *Input, const char *_ArchName)
51169240Sjfv  : Action(BindArchClass, Input, Input->getType()), ArchName(_ArchName) {
52169240Sjfv}
53169240Sjfv
54169589Sjfvvoid JobAction::anchor() {}
55169240Sjfv
56169240SjfvJobAction::JobAction(ActionClass Kind, Action *Input, types::ID Type)
57169240Sjfv  : Action(Kind, Input, Type) {
58169240Sjfv}
59173788Sjfv
60169240SjfvJobAction::JobAction(ActionClass Kind, const ActionList &Inputs, types::ID Type)
61169240Sjfv  : Action(Kind, Inputs, Type) {
62169240Sjfv}
63173788Sjfv
64169240Sjfvvoid PreprocessJobAction::anchor() {}
65169240Sjfv
66169240SjfvPreprocessJobAction::PreprocessJobAction(Action *Input, types::ID OutputType)
67169240Sjfv  : JobAction(PreprocessJobClass, Input, OutputType) {
68169240Sjfv}
69169240Sjfv
70169240Sjfvvoid PrecompileJobAction::anchor() {}
71169240Sjfv
72169240SjfvPrecompileJobAction::PrecompileJobAction(Action *Input, types::ID OutputType)
73169240Sjfv  : JobAction(PrecompileJobClass, Input, OutputType) {
74169240Sjfv}
75169240Sjfv
76169240Sjfvvoid AnalyzeJobAction::anchor() {}
77169240Sjfv
78169240SjfvAnalyzeJobAction::AnalyzeJobAction(Action *Input, types::ID OutputType)
79169240Sjfv  : JobAction(AnalyzeJobClass, Input, OutputType) {
80169589Sjfv}
81169240Sjfv
82169240Sjfvvoid MigrateJobAction::anchor() {}
83169240Sjfv
84169240SjfvMigrateJobAction::MigrateJobAction(Action *Input, types::ID OutputType)
85173788Sjfv  : JobAction(MigrateJobClass, Input, OutputType) {
86169240Sjfv}
87169240Sjfv
88169240Sjfvvoid CompileJobAction::anchor() {}
89173788Sjfv
90169240SjfvCompileJobAction::CompileJobAction(Action *Input, types::ID OutputType)
91169240Sjfv  : JobAction(CompileJobClass, Input, OutputType) {
92169240Sjfv}
93169240Sjfv
94169240Sjfvvoid AssembleJobAction::anchor() {}
95169240Sjfv
96169240SjfvAssembleJobAction::AssembleJobAction(Action *Input, types::ID OutputType)
97169240Sjfv  : JobAction(AssembleJobClass, Input, OutputType) {
98169240Sjfv}
99169240Sjfv
100169240Sjfvvoid LinkJobAction::anchor() {}
101169240Sjfv
102169240SjfvLinkJobAction::LinkJobAction(ActionList &Inputs, types::ID Type)
103169240Sjfv  : JobAction(LinkJobClass, Inputs, Type) {
104169240Sjfv}
105169240Sjfv
106169589Sjfvvoid LipoJobAction::anchor() {}
107169240Sjfv
108169240SjfvLipoJobAction::LipoJobAction(ActionList &Inputs, types::ID Type)
109169240Sjfv  : JobAction(LipoJobClass, Inputs, Type) {
110169240Sjfv}
111173788Sjfv
112169240Sjfvvoid DsymutilJobAction::anchor() {}
113169240Sjfv
114169240SjfvDsymutilJobAction::DsymutilJobAction(ActionList &Inputs, types::ID Type)
115173788Sjfv  : JobAction(DsymutilJobClass, Inputs, Type) {
116169240Sjfv}
117169240Sjfv
118169240Sjfvvoid VerifyJobAction::anchor() {}
119169240Sjfv
120169240SjfvVerifyJobAction::VerifyJobAction(ActionList &Inputs, types::ID Type)
121169240Sjfv  : JobAction(VerifyJobClass, Inputs, Type) {
122169240Sjfv}
123169240Sjfv