================ @@ -202,6 +205,39 @@ void ArgList::print(raw_ostream &O) const { LLVM_DUMP_METHOD void ArgList::dump() const { print(dbgs()); } #endif +StringRef ArgList::getSubcommand( + ArrayRef<OptTable::Command> Commands, + std::function<void(ArrayRef<StringRef>)> HandleMultipleSubcommands, + std::function<void(ArrayRef<StringRef>)> HandleOtherPositionals) const { + + SmallVector<StringRef, 4> SubCommands; + SmallVector<StringRef, 4> OtherPositionals; + for (const Arg *A : *this) { + if (A->getOption().getKind() != Option::InputClass) + continue; + + size_t OldSize = SubCommands.size(); + for (const OptTable::Command &CMD : Commands) { + if (StringRef(CMD.Name) == "TopLevelCommand") + continue; + if (StringRef(CMD.Name) == A->getValue()) + SubCommands.push_back(A->getValue()); + } + + if (SubCommands.size() == OldSize) + OtherPositionals.push_back(A->getValue()); + } + if (SubCommands.size() > 1) { + HandleMultipleSubcommands(SubCommands); + } + if (!OtherPositionals.empty()) { + HandleOtherPositionals(OtherPositionals); + } ---------------- PiJoules wrote:
same 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