static bool ActionFailed(const Action *A, const FailingCommandList &FailingCommands) { if (FailingCommands.empty()) return false; for (FailingCommandList::const_iterator CI = FailingCommands.begin(), CE = FailingCommands.end(); CI != CE; ++CI) if (A == &(CI->second->getSource())) return true; for (Action::const_iterator AI = A->begin(), AE = A->end(); AI != AE; ++AI) if (ActionFailed(*AI, FailingCommands)) return true; return false; }
void Compilation::ExecuteJobs(const JobList &Jobs, FailingCommandList &FailingCommands) const { for (const auto &Job : Jobs) { if (!InputsOk(Job, FailingCommands)) continue; const Command *FailingCommand = nullptr; if (int Res = ExecuteCommand(Job, FailingCommand)) FailingCommands.push_back(std::make_pair(Res, FailingCommand)); } }
void Compilation::ExecuteJob(const Job &J, FailingCommandList &FailingCommands) const { if (const Command *C = dyn_cast<Command>(&J)) { if (!InputsOk(*C, FailingCommands)) return; const Command *FailingCommand = nullptr; if (int Res = ExecuteCommand(*C, FailingCommand)) FailingCommands.push_back(std::make_pair(Res, FailingCommand)); } else { const JobList *Jobs = cast<JobList>(&J); for (const auto &Job : *Jobs) ExecuteJob(Job, FailingCommands); } }
void Compilation::ExecuteJob(const Job &J, FailingCommandList &FailingCommands) const { if (const Command *C = dyn_cast<Command>(&J)) { if (!InputsOk(*C, FailingCommands)) return; const Command *FailingCommand = 0; if (int Res = ExecuteCommand(*C, FailingCommand)) FailingCommands.push_back(std::make_pair(Res, FailingCommand)); } else { const JobList *Jobs = cast<JobList>(&J); for (JobList::const_iterator it = Jobs->begin(), ie = Jobs->end(); it != ie; ++it) ExecuteJob(**it, FailingCommands); } }