================
@@ -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

Reply via email to