================ @@ -323,6 +345,39 @@ static void emitOptionParser(const RecordKeeper &Records, raw_ostream &OS) { OS << "\n};\n"; OS << "#endif // OPTTABLE_PREFIXES_TABLE_CODE\n\n"; + // Dump command IDs. + OS << "/////////"; + OS << "// Command IDs\n\n"; + OS << "#ifdef OPTTABLE_COMMAND_IDS_TABLE_CODE\n"; + OS << "static constexpr unsigned OptionCommandIDsTable[] = {\n"; + { + // Ensure the first command set is always empty. + assert(!CommandIDs.empty() && + "We should always emit an empty set of commands"); + assert(CommandIDs.begin()->first.empty() && + "First command set should always be empty"); + llvm::ListSeparator Sep(",\n"); + unsigned CurIndex = 0; + for (auto &[Command, CommandIndex] : CommandIDs) { + // First emit the number of command strings in this list of commands. + OS << Sep << " " << Command.size() << " /* commands */"; + CommandIndex = CurIndex; + assert((CurIndex == 0 || !Command.empty()) && + "Only first command set should be empty!"); + for (const auto &CommandKey : Command) { + auto It = llvm::find_if(Commands, [&](const Record *R) { ---------------- PiJoules wrote:
We can use `std::find_if` directly. I think `llvm::find_if` just calls it. https://github.com/llvm/llvm-project/pull/155026 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits