COFF: Split ObjectFile::createSymbolBody into small functions. NFC.

llvm-svn: 241011
diff --git a/lld/COFF/InputFiles.cpp b/lld/COFF/InputFiles.cpp
index 5688f50..2022554 100644
--- a/lld/COFF/InputFiles.cpp
+++ b/lld/COFF/InputFiles.cpp
@@ -168,7 +168,14 @@
       AuxP = COFFObj->getSymbol(I + 1)->getRawPtr();
     bool IsFirst = (LastSectionNumber != Sym.getSectionNumber());
 
-    SymbolBody *Body = createSymbolBody(Sym, AuxP, IsFirst);
+    SymbolBody *Body = nullptr;
+    if (Sym.isUndefined()) {
+      Body = createUndefined(Sym);
+    } else if (Sym.isWeakExternal()) {
+      Body = createWeakExternal(Sym, AuxP);
+    } else {
+      Body = createDefined(Sym, AuxP, IsFirst);
+    }
     if (Body) {
       SymbolBodies.push_back(Body);
       SparseSymbolBodies[I] = Body;
@@ -179,13 +186,22 @@
   return std::error_code();
 }
 
-SymbolBody *ObjectFile::createSymbolBody(COFFSymbolRef Sym, const void *AuxP,
-                                         bool IsFirst) {
+Undefined *ObjectFile::createUndefined(COFFSymbolRef Sym) {
   StringRef Name;
-  if (Sym.isUndefined()) {
-    COFFObj->getSymbolName(Sym, Name);
-    return new (Alloc) Undefined(Name);
-  }
+  COFFObj->getSymbolName(Sym, Name);
+  return new (Alloc) Undefined(Name);
+}
+
+Undefined *ObjectFile::createWeakExternal(COFFSymbolRef Sym, const void *AuxP) {
+  StringRef Name;
+  COFFObj->getSymbolName(Sym, Name);
+  auto *Aux = (const coff_aux_weak_external *)AuxP;
+  return new (Alloc) Undefined(Name, &SparseSymbolBodies[Aux->TagIndex]);
+}
+
+Defined *ObjectFile::createDefined(COFFSymbolRef Sym, const void *AuxP,
+                                   bool IsFirst) {
+  StringRef Name;
   if (Sym.isCommon()) {
     auto *C = new (Alloc) CommonChunk(Sym);
     Chunks.push_back(C);
@@ -200,12 +216,6 @@
   }
   if (Sym.getSectionNumber() == llvm::COFF::IMAGE_SYM_DEBUG)
     return nullptr;
-  // TODO: Handle IMAGE_WEAK_EXTERN_SEARCH_ALIAS
-  if (Sym.isWeakExternal()) {
-    COFFObj->getSymbolName(Sym, Name);
-    auto *Aux = (const coff_aux_weak_external *)AuxP;
-    return new (Alloc) Undefined(Name, &SparseSymbolBodies[Aux->TagIndex]);
-  }
 
   // Nothing else to do without a section chunk.
   auto *SC = cast_or_null<SectionChunk>(SparseChunks[Sym.getSectionNumber()]);