Move some code out of line. No functionality change.
authorRafael Espindola <rafael.espindola@gmail.com>
Tue, 9 Jul 2013 03:39:35 +0000 (03:39 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Tue, 9 Jul 2013 03:39:35 +0000 (03:39 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185901 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Object/Archive.h
lib/Object/Archive.cpp

index 7a818a10d83d87a00b6ffca394924da67903b192..8f9c7265754e6b6923d9b39e11718576cf59408d 100644 (file)
 #ifndef LLVM_OBJECT_ARCHIVE_H
 #define LLVM_OBJECT_ARCHIVE_H
 
-#include "llvm/ADT/SmallString.h"
 #include "llvm/ADT/StringRef.h"
-#include "llvm/ADT/Twine.h"
 #include "llvm/Object/Binary.h"
-#include "llvm/Support/DataTypes.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/MemoryBuffer.h"
 
@@ -33,28 +30,10 @@ struct ArchiveMemberHeader {
   char Size[10]; ///< Size of data, not including header or padding.
   char Terminator[2];
 
-  ///! Get the name without looking up long names.
-  llvm::StringRef getName() const {
-    char EndCond;
-    if (Name[0] == '/' || Name[0] == '#')
-      EndCond = ' ';
-    else
-      EndCond = '/';
-    llvm::StringRef::size_type end =
-        llvm::StringRef(Name, sizeof(Name)).find(EndCond);
-    if (end == llvm::StringRef::npos)
-      end = sizeof(Name);
-    assert(end <= sizeof(Name) && end > 0);
-    // Don't include the EndCond if there is one.
-    return llvm::StringRef(Name, end);
-  }
+  /// Get the name without looking up long names.
+  llvm::StringRef getName() const;
 
-  uint64_t getSize() const {
-    uint64_t ret;
-    if (llvm::StringRef(Size, sizeof(Size)).rtrim(" ").getAsInteger(10, ret))
-      llvm_unreachable("Size is not an integer.");
-    return ret;
-  }
+  uint64_t getSize() const;
 };
 
 static const ArchiveMemberHeader *ToHeader(const char *base) {
@@ -72,20 +51,7 @@ public:
     uint16_t StartOfFile;
 
   public:
-    Child(const Archive *p, StringRef d) : Parent(p), Data(d) {
-      if (!p || d.empty())
-        return;
-      // Setup StartOfFile and PaddingBytes.
-      StartOfFile = sizeof(ArchiveMemberHeader);
-      // Don't include attached name.
-      StringRef Name = ToHeader(Data.data())->getName();
-      if (Name.startswith("#1/")) {
-        uint64_t NameSize;
-        if (Name.substr(3).rtrim(" ").getAsInteger(10, NameSize))
-          llvm_unreachable("Long name length is not an integer");
-        StartOfFile += NameSize;
-      }
-    }
+    Child(const Archive *p, StringRef d);
 
     bool operator ==(const Child &other) const {
       return (Parent == other.Parent) && (Data.begin() == other.Data.begin());
@@ -95,23 +61,7 @@ public:
       return Data.begin() < other.Data.begin();
     }
 
-    Child getNext() const {
-      size_t SpaceToSkip = Data.size();
-      // If it's odd, add 1 to make it even.
-      if (SpaceToSkip & 1)
-        ++SpaceToSkip;
-
-      const char *NextLoc = Data.data() + SpaceToSkip;
-
-      // Check to see if this is past the end of the archive.
-      if (NextLoc >= Parent->Data->getBufferEnd())
-        return Child(Parent, StringRef(0, 0));
-
-      size_t NextSize =
-          sizeof(ArchiveMemberHeader) + ToHeader(NextLoc)->getSize();
-
-      return Child(Parent, StringRef(NextLoc, NextSize));
-    }
+    Child getNext() const;
 
     error_code getName(StringRef &Result) const;
     StringRef getRawName() const { return ToHeader(Data.data())->getName(); }
@@ -127,16 +77,7 @@ public:
     }
 
     error_code getMemoryBuffer(OwningPtr<MemoryBuffer> &Result,
-                               bool FullPath = false) const {
-      StringRef Name;
-      if (error_code ec = getName(Name))
-        return ec;
-      SmallString<128> Path;
-      Result.reset(MemoryBuffer::getMemBuffer(
-          getBuffer(), FullPath ? (Twine(Parent->getFileName()) + "(" + Name +
-                                   ")").toStringRef(Path) : Name, false));
-      return error_code::success();
-    }
+                               bool FullPath = false) const;
 
     error_code getAsBinary(OwningPtr<Binary> &Result) const;
   };
index 1b6386f0be3211513b5cbf03e4a7c6a53581afde..5585bc44f7e7141fd63f5d934ef907cf27d7ad87 100644 (file)
@@ -13,6 +13,8 @@
 
 #include "llvm/Object/Archive.h"
 #include "llvm/ADT/APInt.h"
+#include "llvm/ADT/SmallString.h"
+#include "llvm/ADT/Twine.h"
 #include "llvm/Support/Endian.h"
 #include "llvm/Support/MemoryBuffer.h"
 
@@ -37,6 +39,60 @@ static bool isInternalMember(const ArchiveMemberHeader &amh) {
 
 void Archive::anchor() { }
 
+StringRef ArchiveMemberHeader::getName() const {
+  char EndCond;
+  if (Name[0] == '/' || Name[0] == '#')
+    EndCond = ' ';
+  else
+    EndCond = '/';
+  llvm::StringRef::size_type end =
+      llvm::StringRef(Name, sizeof(Name)).find(EndCond);
+  if (end == llvm::StringRef::npos)
+    end = sizeof(Name);
+  assert(end <= sizeof(Name) && end > 0);
+  // Don't include the EndCond if there is one.
+  return llvm::StringRef(Name, end);
+}
+
+uint64_t ArchiveMemberHeader::getSize() const {
+  uint64_t ret;
+  if (llvm::StringRef(Size, sizeof(Size)).rtrim(" ").getAsInteger(10, ret))
+    llvm_unreachable("Size is not an integer.");
+  return ret;
+}
+
+Archive::Child::Child(const Archive *p, StringRef d) : Parent(p), Data(d) {
+  if (!p || d.empty())
+    return;
+  // Setup StartOfFile and PaddingBytes.
+  StartOfFile = sizeof(ArchiveMemberHeader);
+  // Don't include attached name.
+  StringRef Name = ToHeader(Data.data())->getName();
+  if (Name.startswith("#1/")) {
+    uint64_t NameSize;
+    if (Name.substr(3).rtrim(" ").getAsInteger(10, NameSize))
+      llvm_unreachable("Long name length is not an integer");
+    StartOfFile += NameSize;
+  }
+}
+
+Archive::Child Archive::Child::getNext() const {
+  size_t SpaceToSkip = Data.size();
+  // If it's odd, add 1 to make it even.
+  if (SpaceToSkip & 1)
+    ++SpaceToSkip;
+
+  const char *NextLoc = Data.data() + SpaceToSkip;
+
+  // Check to see if this is past the end of the archive.
+  if (NextLoc >= Parent->Data->getBufferEnd())
+    return Child(Parent, StringRef(0, 0));
+
+  size_t NextSize = sizeof(ArchiveMemberHeader) + ToHeader(NextLoc)->getSize();
+
+  return Child(Parent, StringRef(NextLoc, NextSize));
+}
+
 error_code Archive::Child::getName(StringRef &Result) const {
   StringRef name = getRawName();
   // Check if it's a special name.
@@ -89,6 +145,20 @@ error_code Archive::Child::getName(StringRef &Result) const {
   return object_error::success;
 }
 
+error_code Archive::Child::getMemoryBuffer(OwningPtr<MemoryBuffer> &Result,
+                                           bool FullPath) const {
+  StringRef Name;
+  if (error_code ec = getName(Name))
+    return ec;
+  SmallString<128> Path;
+  Result.reset(MemoryBuffer::getMemBuffer(
+      getBuffer(), FullPath ? (Twine(Parent->getFileName()) + "(" + Name + ")")
+                                  .toStringRef(Path)
+                            : Name,
+      false));
+  return error_code::success();
+}
+
 error_code Archive::Child::getAsBinary(OwningPtr<Binary> &Result) const {
   OwningPtr<Binary> ret;
   OwningPtr<MemoryBuffer> Buff;