diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp index 8d0f86fcaa5..1ba79915e72 100644 --- a/lib/Bytecode/Reader/Reader.cpp +++ b/lib/Bytecode/Reader/Reader.cpp @@ -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 diff --git a/lib/Bytecode/Reader/Reader.h b/lib/Bytecode/Reader/Reader.h index 5fec59e3788..4593e2acc4b 100644 --- a/lib/Bytecode/Reader/Reader.h +++ b/lib/Bytecode/Reader/Reader.h @@ -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 ); diff --git a/lib/Bytecode/Reader/ReaderWrappers.cpp b/lib/Bytecode/Reader/ReaderWrappers.cpp index 934869e71fe..4542b46d988 100644 --- a/lib/Bytecode/Reader/ReaderWrappers.cpp +++ b/lib/Bytecode/Reader/ReaderWrappers.cpp @@ -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 @@ -63,7 +64,8 @@ bool BytecodeFileReader::read(std::string* ErrMsg) { return true; } unsigned char* buffer = reinterpret_cast(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(), "", ErrMsg)) + if (ParseBytecode(FileBuf, FileData.size(), "", + Compressor::decompressToNewBuffer, ErrMsg)) return true; return false; }