[lld] r187161 - [PECOFF][Driver] Split WinLinkDriver::parse for readability.

Rui Ueyama ruiu at google.com
Thu Jul 25 15:33:08 PDT 2013


Author: ruiu
Date: Thu Jul 25 17:33:08 2013
New Revision: 187161

URL: http://llvm.org/viewvc/llvm-project?rev=187161&view=rev
Log:
[PECOFF][Driver] Split WinLinkDriver::parse for readability.

Modified:
    lld/trunk/lib/Driver/WinLinkDriver.cpp

Modified: lld/trunk/lib/Driver/WinLinkDriver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/WinLinkDriver.cpp?rev=187161&r1=187160&r2=187161&view=diff
==============================================================================
--- lld/trunk/lib/Driver/WinLinkDriver.cpp (original)
+++ lld/trunk/lib/Driver/WinLinkDriver.cpp Thu Jul 25 17:33:08 2013
@@ -266,6 +266,33 @@ void processLibEnv(PECOFFTargetInfo &inf
       info.appendInputSearchPath(info.allocateString(path));
 }
 
+// Parses the given command line options and returns the result. Returns NULL if
+// there's an error in the options.
+std::unique_ptr<llvm::opt::InputArgList> parseArgs(int argc, const char *argv[],
+                                                   raw_ostream &diagnostics) {
+  // Parse command line options using WinLinkOptions.td
+  std::unique_ptr<llvm::opt::InputArgList> parsedArgs;
+  WinLinkOptTable table;
+  unsigned missingIndex;
+  unsigned missingCount;
+  parsedArgs.reset(table.ParseArgs(&argv[1], &argv[argc], missingIndex, missingCount));
+  if (missingCount) {
+    diagnostics << "error: missing arg value for '"
+                << parsedArgs->getArgString(missingIndex) << "' expected "
+                << missingCount << " argument(s).\n";
+    return nullptr;
+  }
+
+  // Show warning for unknown arguments
+  for (auto it = parsedArgs->filtered_begin(OPT_UNKNOWN),
+            ie = parsedArgs->filtered_end(); it != ie; ++it) {
+    diagnostics << "warning: ignoring unknown argument: "
+                << (*it)->getAsString(*parsedArgs) << "\n";
+  }
+
+  return parsedArgs;
+}
+
 } // namespace
 
 
@@ -287,33 +314,19 @@ bool WinLinkDriver::parse(int argc, cons
   int doubleDashPosition = findDoubleDash(argc, argv);
   int argEnd = (doubleDashPosition > 0) ? doubleDashPosition : argc;
 
-  // Parse command line options using WinLinkOptions.td
-  std::unique_ptr<llvm::opt::InputArgList> parsedArgs;
-  WinLinkOptTable table;
-  unsigned missingIndex;
-  unsigned missingCount;
-  parsedArgs.reset(
-      table.ParseArgs(&argv[1], &argv[argEnd], missingIndex, missingCount));
-  if (missingCount) {
-    diagnostics << "error: missing arg value for '"
-                << parsedArgs->getArgString(missingIndex) << "' expected "
-                << missingCount << " argument(s).\n";
+  // Parse the options.
+  std::unique_ptr<llvm::opt::InputArgList> parsedArgs = parseArgs(
+      argEnd, argv, diagnostics);
+  if (!parsedArgs)
     return true;
-  }
 
   // handle /help
   if (parsedArgs->getLastArg(OPT_help)) {
+    WinLinkOptTable table;
     table.PrintHelp(llvm::outs(), argv[0], "LLVM Linker", false);
     return true;
   }
 
-  // Show warning for unknown arguments
-  for (auto it = parsedArgs->filtered_begin(OPT_UNKNOWN),
-            ie = parsedArgs->filtered_end(); it != ie; ++it) {
-    diagnostics << "warning: ignoring unknown argument: "
-                << (*it)->getAsString(*parsedArgs) << "\n";
-  }
-
   // Copy -mllvm
   for (llvm::opt::arg_iterator it = parsedArgs->filtered_begin(OPT_mllvm),
                                ie = parsedArgs->filtered_end();





More information about the llvm-commits mailing list