[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