[clang] [clang-tools-extra] [lld] [llvm] [llvm] Add subcommand support for OptTable (PR #155026)
via llvm-commits
llvm-commits at lists.llvm.org
Fri Sep 5 14:52:57 PDT 2025
================
@@ -202,6 +205,42 @@ void ArgList::print(raw_ostream &O) const {
LLVM_DUMP_METHOD void ArgList::dump() const { print(dbgs()); }
#endif
+StringRef ArgList::getSubcommand(
+ const ArrayRef<OptTable::Command> Commands,
+ std::function<void(ArrayRef<StringRef>)> HandleMultipleSubcommands,
+ std::function<void(ArrayRef<StringRef>)> HandleOtherPositionals) const {
+
+ StringRef SubCommand = {};
+ SmallVector<StringRef, 4> SubCommands;
+ SmallVector<StringRef, 4> OtherPositionals;
+ for (const Arg *A : *this) {
+ bool IsSubCommand = false;
+ if (A->getOption().getKind() == Option::InputClass) {
+ for (const OptTable::Command CMD : Commands) {
+ if (StringRef(CMD.Name) == "TopLevelCommand")
+ continue;
+ if (StringRef(CMD.Name) == A->getValue()) {
+ SubCommands.push_back(A->getValue());
+ IsSubCommand = true;
+ }
+ }
+ if (!IsSubCommand) {
+ OtherPositionals.push_back(A->getValue());
+ IsSubCommand = false;
+ }
+ }
+ }
+ if (SubCommands.size() > 1) {
+ HandleMultipleSubcommands(SubCommands);
+ }
+ if (!OtherPositionals.empty()) {
+ HandleOtherPositionals(OtherPositionals);
+ }
+ if (SubCommands.size() == 1)
+ return SubCommands.front();
+ return SubCommand;
----------------
PiJoules wrote:
I think `SubCommand` is still just `{}` here so maybe just `return {}`.
https://github.com/llvm/llvm-project/pull/155026
More information about the llvm-commits
mailing list