[lld] r276163 - Replace parallel arrays with a StringSwitch.

Rui Ueyama via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 20 12:36:38 PDT 2016


Author: ruiu
Date: Wed Jul 20 14:36:38 2016
New Revision: 276163

URL: http://llvm.org/viewvc/llvm-project?rev=276163&view=rev
Log:
Replace parallel arrays with a StringSwitch.

Modified:
    lld/trunk/ELF/LinkerScript.cpp

Modified: lld/trunk/ELF/LinkerScript.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/ELF/LinkerScript.cpp?rev=276163&r1=276162&r2=276163&view=diff
==============================================================================
--- lld/trunk/ELF/LinkerScript.cpp (original)
+++ lld/trunk/ELF/LinkerScript.cpp Wed Jul 20 14:36:38 2016
@@ -783,23 +783,26 @@ std::vector<StringRef> ScriptParser::rea
 }
 
 unsigned ScriptParser::readPhdrType() {
-  static const char *typeNames[] = {
-      "PT_NULL",         "PT_LOAD",      "PT_DYNAMIC",  "PT_INTERP",
-      "PT_NOTE",         "PT_SHLIB",     "PT_PHDR",     "PT_TLS",
-      "PT_GNU_EH_FRAME", "PT_GNU_STACK", "PT_GNU_RELRO"};
-  static unsigned typeCodes[] = {
-      PT_NULL, PT_LOAD, PT_DYNAMIC,      PT_INTERP,    PT_NOTE,     PT_SHLIB,
-      PT_PHDR, PT_TLS,  PT_GNU_EH_FRAME, PT_GNU_STACK, PT_GNU_RELRO};
-
-  unsigned PhdrType = PT_NULL;
   StringRef Tok = next();
-  auto It = std::find(std::begin(typeNames), std::end(typeNames), Tok);
-  if (It != std::end(typeNames))
-    PhdrType = typeCodes[std::distance(std::begin(typeNames), It)];
-  else
-    setError("invalid program header type");
+  unsigned Ret = StringSwitch<unsigned>(Tok)
+      .Case("PT_NULL", PT_NULL)
+      .Case("PT_LOAD", PT_LOAD)
+      .Case("PT_DYNAMIC", PT_DYNAMIC)
+      .Case("PT_INTERP", PT_INTERP)
+      .Case("PT_NOTE", PT_NOTE)
+      .Case("PT_SHLIB", PT_SHLIB)
+      .Case("PT_PHDR", PT_PHDR)
+      .Case("PT_TLS", PT_TLS)
+      .Case("PT_GNU_EH_FRAME", PT_GNU_EH_FRAME)
+      .Case("PT_GNU_STACK", PT_GNU_STACK)
+      .Case("PT_GNU_RELRO", PT_GNU_RELRO)
+      .Default(-1);
 
-  return PhdrType;
+  if (Ret == (unsigned)-1) {
+    setError("invalid program header type: " + Tok);
+    return PT_NULL;
+  }
+  return Ret;
 }
 
 static bool isUnderSysroot(StringRef Path) {




More information about the llvm-commits mailing list