[PATCH] D89713: llvm-objcopy: extract arg parsing logic to function

Keith Smiley via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Oct 19 10:10:18 PDT 2020


keith created this revision.
Herald added a reviewer: alexshap.
Herald added a reviewer: rupprecht.
Herald added a reviewer: jhenderson.
Herald added a subscriber: abrachet.
Herald added a project: LLVM.
keith requested review of this revision.
Herald added a subscriber: MaskRay.

This reduces a duplicate condition on tool type and removes a deeply
nested ternary.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D89713

Files:
  llvm/tools/llvm-objcopy/llvm-objcopy.cpp


Index: llvm/tools/llvm-objcopy/llvm-objcopy.cpp
===================================================================
--- llvm/tools/llvm-objcopy/llvm-objcopy.cpp
+++ llvm/tools/llvm-objcopy/llvm-objcopy.cpp
@@ -63,6 +63,30 @@
   return Error::success();
 }
 
+Expected<DriverConfig> getDriverConfig(ArrayRef<const char *> Args) {
+  StringRef Stem = sys::path::stem(ToolName);
+  auto Is = [=](StringRef Tool) {
+    // We need to recognize the following filenames:
+    //
+    // llvm-objcopy -> objcopy
+    // strip-10.exe -> strip
+    // powerpc64-unknown-freebsd13-objcopy -> objcopy
+    // llvm-install-name-tool -> install-name-tool
+    auto I = Stem.rfind_lower(Tool);
+    return I != StringRef::npos &&
+           (I + Tool.size() == Stem.size() || !isAlnum(Stem[I + Tool.size()]));
+  };
+
+  if (Is("bitcode-strip") || Is("bitcode_strip"))
+    return parseBitcodeStripOptions(Args);
+  else if (Is("strip"))
+    return parseStripOptions(Args, reportWarning);
+  else if (Is("install-name-tool") || Is("install_name_tool"))
+    return parseInstallNameToolOptions(Args);
+  else
+    return parseObjcopyOptions(Args, reportWarning);
+}
+
 } // end namespace objcopy
 } // end namespace llvm
 
@@ -317,26 +341,6 @@
   InitLLVM X(argc, argv);
   ToolName = argv[0];
 
-  StringRef Stem = sys::path::stem(ToolName);
-  auto Is = [=](StringRef Tool) {
-    // We need to recognize the following filenames:
-    //
-    // llvm-objcopy -> objcopy
-    // strip-10.exe -> strip
-    // powerpc64-unknown-freebsd13-objcopy -> objcopy
-    // llvm-install-name-tool -> install-name-tool
-    auto I = Stem.rfind_lower(Tool);
-    return I != StringRef::npos &&
-           (I + Tool.size() == Stem.size() || !isAlnum(Stem[I + Tool.size()]));
-  };
-  ToolType Tool = ToolType::Objcopy;
-  if (Is("bitcode-strip") || Is("bitcode_strip"))
-    Tool = ToolType::BitcodeStrip;
-  else if (Is("strip"))
-    Tool = ToolType::Strip;
-  else if (Is("install-name-tool") || Is("install_name_tool"))
-    Tool = ToolType::InstallNameTool;
-
   // Expand response files.
   // TODO: Move these lines, which are copied from lib/Support/CommandLine.cpp,
   // into a separate function in the CommandLine library and call that function
@@ -351,14 +355,8 @@
                           NewArgv);
 
   auto Args = makeArrayRef(NewArgv).drop_front();
-  Expected<DriverConfig> DriverConfig =
-      (Tool == ToolType::Strip)
-          ? parseStripOptions(Args, reportWarning)
-          : ((Tool == ToolType::InstallNameTool)
-                 ? parseInstallNameToolOptions(Args)
-                 : ((Tool == ToolType::BitcodeStrip)
-                        ? parseBitcodeStripOptions(Args)
-                        : parseObjcopyOptions(Args, reportWarning)));
+  Expected<DriverConfig> DriverConfig = getDriverConfig(Args);
+
   if (!DriverConfig) {
     logAllUnhandledErrors(DriverConfig.takeError(),
                           WithColor::error(errs(), ToolName));


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D89713.299088.patch
Type: text/x-patch
Size: 2963 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201019/aa238059/attachment.bin>


More information about the llvm-commits mailing list