Action.cpp revision 280031
150397Sobrien//===--- Action.cpp - Abstract compilation steps --------------------------===//
290075Sobrien//
3169689Skan//                     The LLVM Compiler Infrastructure
450397Sobrien//
590075Sobrien// This file is distributed under the University of Illinois Open Source
650397Sobrien// License. See LICENSE.TXT for details.
790075Sobrien//
890075Sobrien//===----------------------------------------------------------------------===//
990075Sobrien
1090075Sobrien#include "clang/Driver/Action.h"
1150397Sobrien#include "llvm/Support/ErrorHandling.h"
1290075Sobrien#include <cassert>
1390075Sobrienusing namespace clang::driver;
1490075Sobrienusing namespace llvm::opt;
1590075Sobrien
1650397SobrienAction::~Action() {
1750397Sobrien  if (OwnsInputs) {
1890075Sobrien    for (iterator it = begin(), ie = end(); it != ie; ++it)
19169689Skan      delete *it;
20169689Skan  }
2150397Sobrien}
2250397Sobrien
2350397Sobrienconst char *Action::getClassName(ActionClass AC) {
2450397Sobrien  switch (AC) {
2550397Sobrien  case InputClass: return "input";
2650397Sobrien  case BindArchClass: return "bind-arch";
2750397Sobrien  case PreprocessJobClass: return "preprocessor";
2850397Sobrien  case PrecompileJobClass: return "precompiler";
2950397Sobrien  case AnalyzeJobClass: return "analyzer";
30132718Skan  case MigrateJobClass: return "migrator";
31132718Skan  case CompileJobClass: return "compiler";
3252284Sobrien  case BackendJobClass: return "backend";
3390075Sobrien  case AssembleJobClass: return "assembler";
3450397Sobrien  case LinkJobClass: return "linker";
3550397Sobrien  case LipoJobClass: return "lipo";
3650397Sobrien  case DsymutilJobClass: return "dsymutil";
3750397Sobrien  case VerifyDebugInfoJobClass: return "verify-debug-info";
3850397Sobrien  case VerifyPCHJobClass: return "verify-pch";
3950397Sobrien  }
4090075Sobrien
4150397Sobrien  llvm_unreachable("invalid class");
4250397Sobrien}
4390075Sobrien
4450397Sobrienvoid InputAction::anchor() {}
4590075Sobrien
46169689SkanInputAction::InputAction(const Arg &_Input, types::ID _Type)
47169689Skan  : Action(InputClass, _Type), Input(_Input) {
4850397Sobrien}
4990075Sobrien
5090075Sobrienvoid BindArchAction::anchor() {}
5190075Sobrien
5290075SobrienBindArchAction::BindArchAction(std::unique_ptr<Action> Input,
5390075Sobrien                               const char *_ArchName)
5490075Sobrien    : Action(BindArchClass, std::move(Input)), ArchName(_ArchName) {}
5590075Sobrien
5690075Sobrienvoid JobAction::anchor() {}
5790075Sobrien
58132718SkanJobAction::JobAction(ActionClass Kind, std::unique_ptr<Action> Input,
59132718Skan                     types::ID Type)
60132718Skan    : Action(Kind, std::move(Input), Type) {}
61132718Skan
62132718SkanJobAction::JobAction(ActionClass Kind, const ActionList &Inputs, types::ID Type)
6350397Sobrien  : Action(Kind, Inputs, Type) {
6450397Sobrien}
6550397Sobrien
6650397Sobrienvoid PreprocessJobAction::anchor() {}
6750397Sobrien
6850397SobrienPreprocessJobAction::PreprocessJobAction(std::unique_ptr<Action> Input,
6950397Sobrien                                         types::ID OutputType)
7050397Sobrien    : JobAction(PreprocessJobClass, std::move(Input), OutputType) {}
7150397Sobrien
72132718Skanvoid PrecompileJobAction::anchor() {}
73132718Skan
74132718SkanPrecompileJobAction::PrecompileJobAction(std::unique_ptr<Action> Input,
7552284Sobrien                                         types::ID OutputType)
76132718Skan    : JobAction(PrecompileJobClass, std::move(Input), OutputType) {}
77132718Skan
78132718Skanvoid AnalyzeJobAction::anchor() {}
79169689Skan
80132718SkanAnalyzeJobAction::AnalyzeJobAction(std::unique_ptr<Action> Input,
81132718Skan                                   types::ID OutputType)
82132718Skan    : JobAction(AnalyzeJobClass, std::move(Input), OutputType) {}
83169689Skan
8450397Sobrienvoid MigrateJobAction::anchor() {}
85117395Skan
8652284SobrienMigrateJobAction::MigrateJobAction(std::unique_ptr<Action> Input,
8752284Sobrien                                   types::ID OutputType)
88132718Skan    : JobAction(MigrateJobClass, std::move(Input), OutputType) {}
8952284Sobrien
9052284Sobrienvoid CompileJobAction::anchor() {}
9152284Sobrien
9252284SobrienCompileJobAction::CompileJobAction(std::unique_ptr<Action> Input,
9352284Sobrien                                   types::ID OutputType)
9452284Sobrien    : JobAction(CompileJobClass, std::move(Input), OutputType) {}
9552284Sobrien
9652284Sobrienvoid BackendJobAction::anchor() {}
9750397Sobrien
9850397SobrienBackendJobAction::BackendJobAction(std::unique_ptr<Action> Input,
9950397Sobrien                                   types::ID OutputType)
10050397Sobrien    : JobAction(BackendJobClass, std::move(Input), OutputType) {}
10150397Sobrien
102132718Skanvoid AssembleJobAction::anchor() {}
103132718Skan
10450397SobrienAssembleJobAction::AssembleJobAction(std::unique_ptr<Action> Input,
10550397Sobrien                                     types::ID OutputType)
10650397Sobrien    : JobAction(AssembleJobClass, std::move(Input), OutputType) {}
10750397Sobrien
10850397Sobrienvoid LinkJobAction::anchor() {}
10950397Sobrien
11050397SobrienLinkJobAction::LinkJobAction(ActionList &Inputs, types::ID Type)
11150397Sobrien  : JobAction(LinkJobClass, Inputs, Type) {
11250397Sobrien}
11390075Sobrien
11450397Sobrienvoid LipoJobAction::anchor() {}
11550397Sobrien
11650397SobrienLipoJobAction::LipoJobAction(ActionList &Inputs, types::ID Type)
11752284Sobrien  : JobAction(LipoJobClass, Inputs, Type) {
11852284Sobrien}
11952284Sobrien
12052284Sobrienvoid DsymutilJobAction::anchor() {}
12152284Sobrien
12252284SobrienDsymutilJobAction::DsymutilJobAction(ActionList &Inputs, types::ID Type)
12352284Sobrien  : JobAction(DsymutilJobClass, Inputs, Type) {
12452284Sobrien}
12550397Sobrien
12650397Sobrienvoid VerifyJobAction::anchor() {}
12750397Sobrien
12850397SobrienVerifyJobAction::VerifyJobAction(ActionClass Kind,
12990075Sobrien                                 std::unique_ptr<Action> Input, types::ID Type)
13050397Sobrien    : JobAction(Kind, std::move(Input), Type) {
13150397Sobrien  assert((Kind == VerifyDebugInfoJobClass || Kind == VerifyPCHJobClass) &&
13250397Sobrien         "ActionClass is not a valid VerifyJobAction");
13350397Sobrien}
13450397Sobrien
13550397SobrienVerifyJobAction::VerifyJobAction(ActionClass Kind, ActionList &Inputs,
13690075Sobrien                                 types::ID Type)
13790075Sobrien    : JobAction(Kind, Inputs, Type) {
13890075Sobrien  assert((Kind == VerifyDebugInfoJobClass || Kind == VerifyPCHJobClass) &&
139169689Skan           "ActionClass is not a valid VerifyJobAction");
14090075Sobrien}
14190075Sobrien
14290075Sobrienvoid VerifyDebugInfoJobAction::anchor() {}
14390075Sobrien
14490075SobrienVerifyDebugInfoJobAction::VerifyDebugInfoJobAction(
14590075Sobrien    std::unique_ptr<Action> Input, types::ID Type)
14650397Sobrien    : VerifyJobAction(VerifyDebugInfoJobClass, std::move(Input), Type) {}
14750397Sobrien
14850397Sobrienvoid VerifyPCHJobAction::anchor() {}
14950397Sobrien
15090075SobrienVerifyPCHJobAction::VerifyPCHJobAction(std::unique_ptr<Action> Input,
15150397Sobrien                                       types::ID Type)
15250397Sobrien    : VerifyJobAction(VerifyPCHJobClass, std::move(Input), Type) {}
15350397Sobrien