[llvm-commits] CVS: llvm/lib/Bytecode/Reader/ReaderWrappers.cpp
LLVM
llvm at cs.uiuc.edu
Tue Jun 29 18:25:01 PDT 2004
Changes in directory llvm/lib/Bytecode/Reader:
ReaderWrappers.cpp updated: 1.22 -> 1.23
---
Log message:
Adjustments to allow Bytecode Reading to support the BytecodeHandler
interface which is called by the reader if a BytecodeHandler is provided.
---
Diffs of the changes: (+68 -15)
Index: llvm/lib/Bytecode/Reader/ReaderWrappers.cpp
diff -u llvm/lib/Bytecode/Reader/ReaderWrappers.cpp:1.22 llvm/lib/Bytecode/Reader/ReaderWrappers.cpp:1.23
--- llvm/lib/Bytecode/Reader/ReaderWrappers.cpp:1.22 Thu May 27 19:24:41 2004
+++ llvm/lib/Bytecode/Reader/ReaderWrappers.cpp Tue Jun 29 18:24:14 2004
@@ -12,8 +12,9 @@
//
//===----------------------------------------------------------------------===//
+#include "llvm/Bytecode/Analyzer.h"
#include "llvm/Bytecode/Reader.h"
-#include "ReaderInternals.h"
+#include "Reader.h"
#include "llvm/Module.h"
#include "llvm/Instructions.h"
#include "Support/FileUtilities.h"
@@ -29,7 +30,7 @@
namespace {
/// BytecodeFileReader - parses a bytecode file from a file
///
- class BytecodeFileReader : public BytecodeParser {
+ class BytecodeFileReader : public BytecodeReader {
private:
unsigned char *Buffer;
unsigned Length;
@@ -38,7 +39,7 @@
void operator=(const BytecodeFileReader &BFR); // Do not implement
public:
- BytecodeFileReader(const std::string &Filename);
+ BytecodeFileReader(const std::string &Filename, llvm::BytecodeHandler* H=0);
~BytecodeFileReader();
};
}
@@ -47,7 +48,10 @@
return ::strerror(savedErrNum) + std::string(", while trying to ") + descr;
}
-BytecodeFileReader::BytecodeFileReader(const std::string &Filename) {
+BytecodeFileReader::BytecodeFileReader(const std::string &Filename,
+ llvm::BytecodeHandler* H )
+ : BytecodeReader(H)
+{
Buffer = (unsigned char*)ReadFileIntoAddressSpace(Filename, Length);
if (Buffer == 0)
throw "Error reading file '" + Filename + "'.";
@@ -73,7 +77,7 @@
namespace {
/// BytecodeBufferReader - parses a bytecode file from a buffer
///
- class BytecodeBufferReader : public BytecodeParser {
+ class BytecodeBufferReader : public BytecodeReader {
private:
const unsigned char *Buffer;
bool MustDelete;
@@ -83,7 +87,8 @@
public:
BytecodeBufferReader(const unsigned char *Buf, unsigned Length,
- const std::string &ModuleID);
+ const std::string &ModuleID,
+ llvm::BytecodeHandler* Handler = 0);
~BytecodeBufferReader();
};
@@ -91,7 +96,9 @@
BytecodeBufferReader::BytecodeBufferReader(const unsigned char *Buf,
unsigned Length,
- const std::string &ModuleID)
+ const std::string &ModuleID,
+ llvm::BytecodeHandler* H )
+ : BytecodeReader(H)
{
// If not aligned, allocate a new buffer to hold the bytecode...
const unsigned char *ParseBegin = 0;
@@ -125,7 +132,7 @@
namespace {
/// BytecodeStdinReader - parses a bytecode file from stdin
///
- class BytecodeStdinReader : public BytecodeParser {
+ class BytecodeStdinReader : public BytecodeReader {
private:
std::vector<unsigned char> FileData;
unsigned char *FileBuf;
@@ -134,11 +141,13 @@
void operator=(const BytecodeStdinReader &BFR); // Do not implement
public:
- BytecodeStdinReader();
+ BytecodeStdinReader( llvm::BytecodeHandler* H = 0 );
};
}
-BytecodeStdinReader::BytecodeStdinReader() {
+BytecodeStdinReader::BytecodeStdinReader( BytecodeHandler* H )
+ : BytecodeReader(H)
+{
int BlockSize;
unsigned char Buffer[4096*4];
@@ -238,8 +247,10 @@
ModuleProvider*
llvm::getBytecodeBufferModuleProvider(const unsigned char *Buffer,
unsigned Length,
- const std::string &ModuleID) {
- return CheckVarargs(new BytecodeBufferReader(Buffer, Length, ModuleID));
+ const std::string &ModuleID,
+ BytecodeHandler* H ) {
+ return CheckVarargs(
+ new BytecodeBufferReader(Buffer, Length, ModuleID, H));
}
/// ParseBytecodeBuffer - Parse a given bytecode buffer
@@ -259,11 +270,12 @@
/// getBytecodeModuleProvider - lazy function-at-a-time loading from a file
///
-ModuleProvider *llvm::getBytecodeModuleProvider(const std::string &Filename) {
+ModuleProvider *llvm::getBytecodeModuleProvider(const std::string &Filename,
+ BytecodeHandler* H) {
if (Filename != std::string("-")) // Read from a file...
- return CheckVarargs(new BytecodeFileReader(Filename));
+ return CheckVarargs(new BytecodeFileReader(Filename,H));
else // Read from stdin
- return CheckVarargs(new BytecodeStdinReader());
+ return CheckVarargs(new BytecodeStdinReader(H));
}
/// ParseBytecodeFile - Parse the given bytecode file
@@ -279,3 +291,44 @@
}
}
+namespace llvm {
+extern BytecodeHandler* createBytecodeAnalyzerHandler(BytecodeAnalysis& bca );
+}
+
+// AnalyzeBytecodeFile - analyze one file
+Module* llvm::AnalyzeBytecodeFile(const std::string &Filename,
+ BytecodeAnalysis& bca,
+ std::string *ErrorStr)
+{
+ try {
+ BytecodeHandler* analyzerHandler = createBytecodeAnalyzerHandler(bca);
+ std::auto_ptr<ModuleProvider> AMP(
+ getBytecodeModuleProvider(Filename,analyzerHandler));
+ return AMP->releaseModule();
+ } catch (std::string &err) {
+ if (ErrorStr) *ErrorStr = err;
+ return 0;
+ }
+}
+
+// AnalyzeBytecodeBuffer - analyze a buffer
+Module* llvm::AnalyzeBytecodeBuffer(
+ const unsigned char* Buffer, ///< Pointer to start of bytecode buffer
+ unsigned Length, ///< Size of the bytecode buffer
+ const std::string& ModuleID, ///< Identifier for the module
+ BytecodeAnalysis& bca, ///< The results of the analysis
+ std::string* ErrorStr ///< Errors, if any.
+ )
+{
+ try {
+ BytecodeHandler* hdlr = createBytecodeAnalyzerHandler(bca);
+ std::auto_ptr<ModuleProvider>
+ AMP(getBytecodeBufferModuleProvider(Buffer, Length, ModuleID, hdlr));
+ return AMP->releaseModule();
+ } catch (std::string &err) {
+ if (ErrorStr) *ErrorStr = err;
+ return 0;
+ }
+}
+
+// vim: sw=2 ai
More information about the llvm-commits
mailing list