diff options
author | Chris Lattner <sabre@nondot.org> | 2007-02-07 21:41:02 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2007-02-07 21:41:02 +0000 |
commit | a0e49f2ead3d18dbae26a2ddf7287b4c9c484cb1 (patch) | |
tree | 088a5512dea02d1cc104ddcb4e8187e4f738af2b /llvm/lib/Bytecode/Archive/ArchiveReader.cpp | |
parent | cca9b1d7681b0670427825f752e623b1b5893fb4 (diff) | |
download | bcm5719-llvm-a0e49f2ead3d18dbae26a2ddf7287b4c9c484cb1.tar.gz bcm5719-llvm-a0e49f2ead3d18dbae26a2ddf7287b4c9c484cb1.zip |
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.
llvm-svn: 34012
Diffstat (limited to 'llvm/lib/Bytecode/Archive/ArchiveReader.cpp')
-rw-r--r-- | llvm/lib/Bytecode/Archive/ArchiveReader.cpp | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/llvm/lib/Bytecode/Archive/ArchiveReader.cpp b/llvm/lib/Bytecode/Archive/ArchiveReader.cpp index 82ff9edc8ae..67b6549e15e 100644 --- a/llvm/lib/Bytecode/Archive/ArchiveReader.cpp +++ b/llvm/lib/Bytecode/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 |