[lld] r198535 - Replace nested switch statements.

Rui Ueyama ruiu at google.com
Sat Jan 4 18:41:07 PST 2014


Author: ruiu
Date: Sat Jan  4 20:41:07 2014
New Revision: 198535

URL: http://llvm.org/viewvc/llvm-project?rev=198535&view=rev
Log:
Replace nested switch statements.

Differential Revision: http://llvm-reviews.chandlerc.com/D2501

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

Modified: lld/trunk/lib/Driver/GnuLdDriver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/Driver/GnuLdDriver.cpp?rev=198535&r1=198534&r2=198535&view=diff
==============================================================================
--- lld/trunk/lib/Driver/GnuLdDriver.cpp (original)
+++ lld/trunk/lib/Driver/GnuLdDriver.cpp Sat Jan  4 20:41:07 2014
@@ -17,6 +17,7 @@
 #include "lld/Driver/GnuLdInputGraph.h"
 
 #include "llvm/ADT/ArrayRef.h"
+#include "llvm/ADT/Optional.h"
 #include "llvm/ADT/STLExtras.h"
 #include "llvm/ADT/StringExtras.h"
 #include "llvm/ADT/Triple.h"
@@ -123,38 +124,38 @@ bool GnuLdDriver::linkELF(int argc, cons
   return link(*options, diagnostics);
 }
 
+static llvm::Optional<llvm::Triple::ArchType>
+getArchType(const llvm::Triple &triple, StringRef value) {
+  if (triple.getOS() != llvm::Triple::NetBSD)
+    return llvm::None;
+  switch (triple.getArch()) {
+  case llvm::Triple::x86:
+  case llvm::Triple::x86_64:
+    if (value == "elf_i386")
+      return llvm::Triple::x86;
+    if (value == "elf_x86_64")
+      return llvm::Triple::x86_64;
+    return llvm::None;
+  default:
+    return llvm::None;
+  }
+}
+
 bool GnuLdDriver::applyEmulation(llvm::Triple &triple,
                                  llvm::opt::InputArgList &args,
                                  raw_ostream &diagnostics) {
   llvm::opt::Arg *arg = args.getLastArg(OPT_m);
   if (!arg)
     return true;
-  std::string value(arg->getValue());
-
-  switch (triple.getOS()) {
-  case llvm::Triple::NetBSD:
-    switch (triple.getArch()) {
-    case llvm::Triple::x86:
-    case llvm::Triple::x86_64:
-      if (value == "elf_i386") {
-        triple.setArch(llvm::Triple::x86);
-        return true;
-      }
-      if (value == "elf_x86_64") {
-        triple.setArch(llvm::Triple::x86_64);
-        return true;
-      }
-      break;
-    default:
-      break;
-    }
-    break;
-  default:
-    break;
+  llvm::Optional<llvm::Triple::ArchType> arch =
+      getArchType(triple, arg->getValue());
+  if (!arch) {
+    diagnostics << "error: unsupported emulation '" << arg->getValue()
+                << "'.\n";
+    return false;
   }
-
-  diagnostics << "error: unsupported emulation '" << value << "'.\n";
-  return false;
+  triple.setArch(*arch);
+  return true;
 }
 
 void GnuLdDriver::addPlatformSearchDirs(ELFLinkingContext &ctx,





More information about the llvm-commits mailing list