public:
BytecodeFileReader(const std::string &Filename, llvm::BytecodeHandler* H=0);
bool read(std::string* ErrMsg);
+
+ void freeState() {
+ BytecodeReader::freeState();
+ mapFile.close();
+ }
};
}
BytecodeFileReader::BytecodeFileReader(const std::string &Filename,
- llvm::BytecodeHandler* H )
- : BytecodeReader(H)
- , fileName(Filename)
- , mapFile()
-{
+ llvm::BytecodeHandler* H)
+ : BytecodeReader(H), fileName(Filename) {
}
bool BytecodeFileReader::read(std::string* ErrMsg) {
return true;
}
unsigned char* buffer = reinterpret_cast<unsigned char*>(mapFile.base());
- if (ParseBytecode(buffer, mapFile.size(), fileName, ErrMsg)) {
- return true;
- }
- return false;
+ return ParseBytecode(buffer, mapFile.size(), fileName, ErrMsg);
}
//===----------------------------------------------------------------------===//
BytecodeBufferReader::BytecodeBufferReader(const unsigned char *buf,
unsigned len,
const std::string &modID,
- llvm::BytecodeHandler* H)
- : BytecodeReader(H)
- , Buffer(0)
- , Buf(buf)
- , Length(len)
- , ModuleID(modID)
- , MustDelete(false)
-{
+ llvm::BytecodeHandler *H)
+ : BytecodeReader(H), Buffer(0), Buf(buf), Length(len), ModuleID(modID)
+ , MustDelete(false) {
}
BytecodeBufferReader::~BytecodeBufferReader() {
llvm::getBytecodeBufferModuleProvider(const unsigned char *Buffer,
unsigned Length,
const std::string &ModuleID,
- std::string* ErrMsg,
- BytecodeHandler* H) {
+ std::string *ErrMsg,
+ BytecodeHandler *H) {
BytecodeBufferReader* rdr =
new BytecodeBufferReader(Buffer, Length, ModuleID, H);
if (rdr->read(ErrMsg))
///
Module *llvm::ParseBytecodeBuffer(const unsigned char *Buffer, unsigned Length,
const std::string &ModuleID,
- std::string *ErrMsg){
- ModuleProvider* MP =
+ std::string *ErrMsg) {
+ ModuleProvider *MP =
getBytecodeBufferModuleProvider(Buffer, Length, ModuleID, ErrMsg, 0);
- if (!MP)
- return 0;
- return MP->releaseModule();
+ if (!MP) return 0;
+ Module *M = MP->releaseModule();
+ delete MP;
+ return M;
}
/// getBytecodeModuleProvider - lazy function-at-a-time loading from a file
Module *llvm::ParseBytecodeFile(const std::string &Filename,
std::string *ErrMsg) {
ModuleProvider* MP = getBytecodeModuleProvider(Filename, ErrMsg);
- if (!MP)
- return 0;
- return MP->releaseModule();
+ if (!MP) return 0;
+ Module *M = MP->releaseModule();
+ delete MP;
+ return M;
}
// AnalyzeBytecodeFile - analyze one file
BytecodeAnalysis& bca, ///< Statistical output
std::string *ErrMsg, ///< Error output
std::ostream* output ///< Dump output
-)
-{
+) {
BytecodeHandler* AH = createBytecodeAnalyzerHandler(bca,output);
ModuleProvider* MP = getBytecodeModuleProvider(Filename, ErrMsg, AH);
- if (!MP)
- return 0;
- return MP->releaseModule();
+ if (!MP) return 0;
+ Module *M = MP->releaseModule();
+ delete MP;
+ return M;
}
// AnalyzeBytecodeBuffer - analyze a buffer
BytecodeHandler* hdlr = createBytecodeAnalyzerHandler(bca, output);
ModuleProvider* MP =
getBytecodeBufferModuleProvider(Buffer, Length, ModuleID, ErrMsg, hdlr);
- if (!MP)
- return 0;
- return MP->releaseModule();
+ if (!MP) return 0;
+ Module *M = MP->releaseModule();
+ delete MP;
+ return M;
}
bool llvm::GetBytecodeDependentLibraries(const std::string &fname,
Module::LibraryListType& deplibs,
std::string* ErrMsg) {
- ModuleProvider* MP = getBytecodeModuleProvider(fname, ErrMsg);
+ ModuleProvider* MP = getBytecodeModuleProvider(fname, ErrMsg);
if (!MP) {
deplibs.clear();
return true;
Module* M = MP->releaseModule();
deplibs = M->getLibraries();
delete M;
+ delete MP;
return false;
}
bool llvm::GetBytecodeSymbols(const sys::Path& fName,
std::vector<std::string>& symbols,
std::string* ErrMsg) {
- ModuleProvider* MP = getBytecodeModuleProvider(fName.toString(), ErrMsg);
+ ModuleProvider *MP = getBytecodeModuleProvider(fName.toString(), ErrMsg);
if (!MP)
return true;
// Get the module from the provider
Module* M = MP->materializeModule();
- if (M == 0)
+ if (M == 0) {
+ delete MP;
return true;
+ }
// Get the symbols
getSymbols(M, symbols);
- // Done with the module
+ // Done with the module.
+ delete MP;
return true;
}