clang API Documentation
00001 //===--- Action.cpp - Abstract compilation steps --------------------------===// 00002 // 00003 // The LLVM Compiler Infrastructure 00004 // 00005 // This file is distributed under the University of Illinois Open Source 00006 // License. See LICENSE.TXT for details. 00007 // 00008 //===----------------------------------------------------------------------===// 00009 00010 #include "clang/Driver/Action.h" 00011 #include "llvm/Support/ErrorHandling.h" 00012 00013 #include <cassert> 00014 using namespace clang::driver; 00015 00016 Action::~Action() { 00017 if (OwnsInputs) { 00018 for (iterator it = begin(), ie = end(); it != ie; ++it) 00019 delete *it; 00020 } 00021 } 00022 00023 const char *Action::getClassName(ActionClass AC) { 00024 switch (AC) { 00025 case InputClass: return "input"; 00026 case BindArchClass: return "bind-arch"; 00027 case PreprocessJobClass: return "preprocessor"; 00028 case PrecompileJobClass: return "precompiler"; 00029 case AnalyzeJobClass: return "analyzer"; 00030 case MigrateJobClass: return "migrator"; 00031 case CompileJobClass: return "compiler"; 00032 case AssembleJobClass: return "assembler"; 00033 case LinkJobClass: return "linker"; 00034 case LipoJobClass: return "lipo"; 00035 case DsymutilJobClass: return "dsymutil"; 00036 case VerifyJobClass: return "verify"; 00037 } 00038 00039 llvm_unreachable("invalid class"); 00040 } 00041 00042 void InputAction::anchor() {} 00043 00044 InputAction::InputAction(const Arg &_Input, types::ID _Type) 00045 : Action(InputClass, _Type), Input(_Input) { 00046 } 00047 00048 void BindArchAction::anchor() {} 00049 00050 BindArchAction::BindArchAction(Action *Input, const char *_ArchName) 00051 : Action(BindArchClass, Input, Input->getType()), ArchName(_ArchName) { 00052 } 00053 00054 void JobAction::anchor() {} 00055 00056 JobAction::JobAction(ActionClass Kind, Action *Input, types::ID Type) 00057 : Action(Kind, Input, Type) { 00058 } 00059 00060 JobAction::JobAction(ActionClass Kind, const ActionList &Inputs, types::ID Type) 00061 : Action(Kind, Inputs, Type) { 00062 } 00063 00064 void PreprocessJobAction::anchor() {} 00065 00066 PreprocessJobAction::PreprocessJobAction(Action *Input, types::ID OutputType) 00067 : JobAction(PreprocessJobClass, Input, OutputType) { 00068 } 00069 00070 void PrecompileJobAction::anchor() {} 00071 00072 PrecompileJobAction::PrecompileJobAction(Action *Input, types::ID OutputType) 00073 : JobAction(PrecompileJobClass, Input, OutputType) { 00074 } 00075 00076 void AnalyzeJobAction::anchor() {} 00077 00078 AnalyzeJobAction::AnalyzeJobAction(Action *Input, types::ID OutputType) 00079 : JobAction(AnalyzeJobClass, Input, OutputType) { 00080 } 00081 00082 void MigrateJobAction::anchor() {} 00083 00084 MigrateJobAction::MigrateJobAction(Action *Input, types::ID OutputType) 00085 : JobAction(MigrateJobClass, Input, OutputType) { 00086 } 00087 00088 void CompileJobAction::anchor() {} 00089 00090 CompileJobAction::CompileJobAction(Action *Input, types::ID OutputType) 00091 : JobAction(CompileJobClass, Input, OutputType) { 00092 } 00093 00094 void AssembleJobAction::anchor() {} 00095 00096 AssembleJobAction::AssembleJobAction(Action *Input, types::ID OutputType) 00097 : JobAction(AssembleJobClass, Input, OutputType) { 00098 } 00099 00100 void LinkJobAction::anchor() {} 00101 00102 LinkJobAction::LinkJobAction(ActionList &Inputs, types::ID Type) 00103 : JobAction(LinkJobClass, Inputs, Type) { 00104 } 00105 00106 void LipoJobAction::anchor() {} 00107 00108 LipoJobAction::LipoJobAction(ActionList &Inputs, types::ID Type) 00109 : JobAction(LipoJobClass, Inputs, Type) { 00110 } 00111 00112 void DsymutilJobAction::anchor() {} 00113 00114 DsymutilJobAction::DsymutilJobAction(ActionList &Inputs, types::ID Type) 00115 : JobAction(DsymutilJobClass, Inputs, Type) { 00116 } 00117 00118 void VerifyJobAction::anchor() {} 00119 00120 VerifyJobAction::VerifyJobAction(ActionList &Inputs, types::ID Type) 00121 : JobAction(VerifyJobClass, Inputs, Type) { 00122 }