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