Driver: Add OptTable::ParseOneArg.


git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@66090 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Driver/OptTable.cpp b/lib/Driver/OptTable.cpp
index 070c12e..284e3ba 100644
--- a/lib/Driver/OptTable.cpp
+++ b/lib/Driver/OptTable.cpp
@@ -9,6 +9,8 @@
 
 #include "clang/Driver/Options.h"
 
+#include "clang/Driver/Arg.h"
+#include "clang/Driver/ArgList.h"
 #include "clang/Driver/Option.h"
 #include <cassert>
 
@@ -115,3 +117,24 @@
 
   return Opt;
 }
+
+Arg *OptTable::ParseOneArg(const ArgList &Args, unsigned &Index, 
+                           unsigned IndexEnd) const {
+  const char *Str = Args.getArgString(Index);
+
+  // Anything that doesn't start with '-' is an input.
+  if (Str[0] != '-')
+    return new PositionalArg(getOption(InputOpt), Index++);
+
+  for (unsigned j = UnknownOpt + 1; j < getNumOptions(); ++j) {
+    const char *OptName = getOptionName((options::ID) (j + 1));
+    
+    // Arguments are only accepted by options which prefix them.
+    if (memcmp(Str, OptName, strlen(OptName)) == 0)
+      if (Arg *A = getOption((options::ID) (j + 1))->accept(Args, Index))
+        return A;
+  }
+
+  return new PositionalArg(getOption(UnknownOpt), Index++);
+}
+