Move compressor out of the core Reader.cpp file.
authorChris Lattner <sabre@nondot.org>
Wed, 7 Feb 2007 19:49:01 +0000 (19:49 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 7 Feb 2007 19:49:01 +0000 (19:49 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34007 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Bytecode/Reader/Reader.cpp
lib/Bytecode/Reader/Reader.h
lib/Bytecode/Reader/ReaderWrappers.cpp

index 8d0f86fcaa51332d1a982534a7f15abf7c0fe7cc..1ba79915e72e42470adb90a290d02fd25c7184fd 100644 (file)
@@ -27,7 +27,6 @@
 #include "llvm/Bytecode/Format.h"
 #include "llvm/Config/alloca.h"
 #include "llvm/Support/GetElementPtrTypeIterator.h"
-#include "llvm/Support/Compressor.h"
 #include "llvm/Support/MathExtras.h"
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/ADT/StringExtras.h"
@@ -1982,6 +1981,7 @@ void BytecodeReader::ParseModule() {
 /// and \p Length parameters.
 bool BytecodeReader::ParseBytecode(volatile BufPtr Buf, unsigned Length,
                                    const std::string &ModuleID,
+                                   Decompressor_t *Decompressor, 
                                    std::string* ErrMsg) {
 
   /// We handle errors by
@@ -2021,8 +2021,8 @@ bool BytecodeReader::ParseBytecode(volatile BufPtr Buf, unsigned Length,
     // file's magic number which is not part of the compressed block. Hence,
     // the Buf+4 and Length-4. The result goes into decompressedBlock, a data
     // member for retention until BytecodeReader is destructed.
-    unsigned decompressedLength = Compressor::decompressToNewBuffer(
-        (char*)Buf+4,Length-4,decompressedBlock);
+    unsigned decompressedLength = 
+      Decompressor((char*)Buf+4,Length-4,decompressedBlock, 0);
 
     // We must adjust the buffer pointers used by the bytecode reader to point
     // into the new decompressed block. After decompression, the
index 5fec59e37880dd749844934cc583b611c1e7a2fb..4593e2acc4b586d0688e8a750a34fb8869e74f3d 100644 (file)
@@ -140,12 +140,16 @@ public:
 /// @name Methods
 /// @{
 public:
+    
+  typedef size_t Decompressor_t(const char *, size_t, char*&, std::string*);
+  
   /// @returns true if an error occurred
   /// @brief Main interface to parsing a bytecode buffer.
   bool ParseBytecode(
      volatile BufPtr Buf,         ///< Beginning of the bytecode buffer
      unsigned Length,             ///< Length of the bytecode buffer
      const std::string &ModuleID, ///< An identifier for the module constructed.
+     Decompressor_t *Decompressor = 0, ///< Optional decompressor.
      std::string* ErrMsg = 0      ///< Optional place for error message 
   );
 
index 934869e71feb413b771b88021499be6bd231ba4f..4542b46d988e87f1138c780850c9d8e6b45ac994 100644 (file)
@@ -18,6 +18,7 @@
 #include "llvm/Module.h"
 #include "llvm/Instructions.h"
 #include "llvm/ADT/StringExtras.h"
+#include "llvm/Support/Compressor.h"
 #include "llvm/System/MappedFile.h"
 #include "llvm/System/Program.h"
 #include <cerrno>
@@ -63,7 +64,8 @@ bool BytecodeFileReader::read(std::string* ErrMsg) {
     return true;
   }
   unsigned char* buffer = reinterpret_cast<unsigned char*>(mapFile.base());
-  return ParseBytecode(buffer, mapFile.size(), fileName, ErrMsg);
+  return ParseBytecode(buffer, mapFile.size(), fileName,
+                       Compressor::decompressToNewBuffer, ErrMsg);
 }
 
 //===----------------------------------------------------------------------===//
@@ -122,7 +124,8 @@ BytecodeBufferReader::read(std::string* ErrMsg) {
     ParseBegin = Buffer = Buf;
     MustDelete = false;
   }
-  if (ParseBytecode(ParseBegin, Length, ModuleID, ErrMsg)) {
+  if (ParseBytecode(ParseBegin, Length, ModuleID,
+                    Compressor::decompressToNewBuffer, ErrMsg)) {
     if (MustDelete) delete [] Buffer;
     return true;
   }
@@ -177,7 +180,8 @@ BytecodeStdinReader::read(std::string* ErrMsg)
   }
 
   FileBuf = &FileData[0];
-  if (ParseBytecode(FileBuf, FileData.size(), "<stdin>", ErrMsg))
+  if (ParseBytecode(FileBuf, FileData.size(), "<stdin>", 
+                    Compressor::decompressToNewBuffer, ErrMsg))
     return true;
   return false;
 }