push bytecode decompressor out through APIs.  Now the bytecode reader
api's look like this:

ModuleProvider *getBytecodeModuleProvider(
  const std::string &Filename,  ///< Name of file to be read
  BCDecompressor_t *BCDC = Compressor::decompressToNewBuffer,
  std::string* ErrMsg = 0,      ///< Optional error message holder
  BytecodeHandler* H = 0        ///< Optional handler for reader events
);

This is ugly, but allows a client to say:

  getBytecodeModuleProvider("foo", 0);

If they do this, there is no dependency on the compression libraries, saving
codesize.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@34012 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Archive/Archive.cpp b/lib/Archive/Archive.cpp
index 3bbc49d..d299694 100644
--- a/lib/Archive/Archive.cpp
+++ b/lib/Archive/Archive.cpp
@@ -138,10 +138,10 @@
 // Archive constructor - this is the only constructor that gets used for the
 // Archive class. Everything else (default,copy) is deprecated. This just
 // initializes and maps the file into memory, if requested.
-Archive::Archive(const sys::Path& filename)
+Archive::Archive(const sys::Path& filename, BCDecompressor_t *BCDC)
   : archPath(filename), members(), mapfile(0), base(0), symTab(), strtab(),
-    symTabSize(0), firstFileOffset(0), modules(), foreignST(0)
-{
+    symTabSize(0), firstFileOffset(0), modules(), foreignST(0), 
+    Decompressor(BCDC) {
 }
 
 bool
diff --git a/lib/Archive/ArchiveReader.cpp b/lib/Archive/ArchiveReader.cpp
index 82ff9ed..67b6549 100644
--- a/lib/Archive/ArchiveReader.cpp
+++ b/lib/Archive/ArchiveReader.cpp
@@ -13,8 +13,8 @@
 
 #include "ArchiveInternals.h"
 #include "llvm/Bytecode/Reader.h"
+#include "llvm/Support/Compressor.h"
 #include <memory>
-
 using namespace llvm;
 
 /// Read a variable-bit-rate encoded unsigned integer
@@ -351,7 +351,9 @@
       std::string FullMemberName = archPath.toString() +
         "(" + I->getPath().toString() + ")";
       Module* M = ParseBytecodeBuffer((const unsigned char*)I->getData(),
-          I->getSize(), FullMemberName, ErrMessage);
+                                      I->getSize(), FullMemberName,
+                                      Compressor::decompressToNewBuffer,
+                                      ErrMessage);
       if (!M)
         return true;
 
@@ -486,7 +488,7 @@
     mbr->getPath().toString() + ")";
   ModuleProvider* mp = getBytecodeBufferModuleProvider(
       (const unsigned char*) mbr->getData(), mbr->getSize(),
-      FullMemberName, ErrMsg, 0);
+      FullMemberName, Decompressor, ErrMsg, 0);
   if (!mp)
     return 0;
 
@@ -500,8 +502,7 @@
 bool
 Archive::findModulesDefiningSymbols(std::set<std::string>& symbols,
                                     std::set<ModuleProvider*>& result,
-                                    std::string* error)
-{
+                                    std::string* error) {
   if (!mapfile || !base) {
     if (error)
       *error = "Empty archive invalid for finding modules defining symbols";
@@ -533,8 +534,10 @@
         std::vector<std::string> symbols;
         std::string FullMemberName = archPath.toString() + "(" +
           mbr->getPath().toString() + ")";
-        ModuleProvider* MP = GetBytecodeSymbols((const unsigned char*)At,
-            mbr->getSize(), FullMemberName, symbols, error);
+        ModuleProvider* MP = 
+          GetBytecodeSymbols((const unsigned char*)At, mbr->getSize(),
+                             FullMemberName, symbols, 
+                             Compressor::decompressToNewBuffer, error);
 
         if (MP) {
           // Insert the module's symbols into the symbol table
diff --git a/lib/Archive/ArchiveWriter.cpp b/lib/Archive/ArchiveWriter.cpp
index 9f4e797..ff8c5f0 100644
--- a/lib/Archive/ArchiveWriter.cpp
+++ b/lib/Archive/ArchiveWriter.cpp
@@ -225,8 +225,10 @@
     std::string FullMemberName = archPath.toString() + "(" +
       member.getPath().toString()
       + ")";
-    ModuleProvider* MP = GetBytecodeSymbols(
-      (const unsigned char*)data,fSize,FullMemberName, symbols, ErrMsg);
+    ModuleProvider* MP = 
+      GetBytecodeSymbols((const unsigned char*)data,fSize,
+                         FullMemberName, symbols,
+                         Compressor::decompressToNewBuffer, ErrMsg);
 
     // If the bytecode parsed successfully
     if ( MP ) {