summaryrefslogtreecommitdiff
path: root/lib/Archive/ArchiveReader.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-02-07 21:41:02 +0000
committerChris Lattner <sabre@nondot.org>2007-02-07 21:41:02 +0000
commitf2e292ce58ca07d9bbe3cad75f8baa35bd85964a (patch)
treed3bc0114e2f71983baef4c33631278640cd7a1cd /lib/Archive/ArchiveReader.cpp
parent403e4a4725af21c267d4189fe88bc48bd438b08c (diff)
downloadllvm-f2e292ce58ca07d9bbe3cad75f8baa35bd85964a.tar.gz
llvm-f2e292ce58ca07d9bbe3cad75f8baa35bd85964a.tar.bz2
llvm-f2e292ce58ca07d9bbe3cad75f8baa35bd85964a.tar.xz
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
Diffstat (limited to 'lib/Archive/ArchiveReader.cpp')
-rw-r--r--lib/Archive/ArchiveReader.cpp17
1 files changed, 10 insertions, 7 deletions
diff --git a/lib/Archive/ArchiveReader.cpp b/lib/Archive/ArchiveReader.cpp
index 82ff9edc8a..67b6549e15 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 @@ Archive::getAllModules(std::vector<Module*>& Modules, std::string* ErrMessage) {
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 @@ Archive::findModuleDefiningSymbol(const std::string& symbol,
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 @@ Archive::findModuleDefiningSymbol(const std::string& symbol,
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 @@ Archive::findModulesDefiningSymbols(std::set<std::string>& symbols,
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