[llvm-commits] CVS: llvm/include/llvm/Bytecode/Analyzer.h Archive.h Reader.h

Chris Lattner sabre at nondot.org
Wed Feb 7 13:41:55 PST 2007



Changes in directory llvm/include/llvm/Bytecode:

Analyzer.h updated: 1.14 -> 1.15
Archive.h updated: 1.19 -> 1.20
Reader.h updated: 1.27 -> 1.28
---
Log message:

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.




---
Diffs of the changes:  (+22 -19)

 Analyzer.h |   17 +++--------------
 Archive.h  |   11 ++++++++---
 Reader.h   |   13 +++++++++++--
 3 files changed, 22 insertions(+), 19 deletions(-)


Index: llvm/include/llvm/Bytecode/Analyzer.h
diff -u llvm/include/llvm/Bytecode/Analyzer.h:1.14 llvm/include/llvm/Bytecode/Analyzer.h:1.15
--- llvm/include/llvm/Bytecode/Analyzer.h:1.14	Wed Feb  7 01:33:02 2007
+++ llvm/include/llvm/Bytecode/Analyzer.h	Wed Feb  7 15:41:01 2007
@@ -20,9 +20,10 @@
 #define LLVM_BYTECODE_ANALYZER_H
 
 #include "llvm/Bytecode/Format.h"
+#include "llvm/Bytecode/Reader.h"
 #include <string>
 #include <map>
-#include <ostream>
+#include <iosfwd>
 
 namespace llvm {
 
@@ -102,23 +103,11 @@
 Module* AnalyzeBytecodeFile(
       const std::string& Filename, ///< The name of the bytecode file to read
       BytecodeAnalysis& Results,   ///< The results of the analysis
+      BCDecompressor_t *BCDC = 0,     ///< Optional decompressor to use.
       std::string* ErrorStr = 0,   ///< Errors, if any.
       std::ostream* output = 0     ///< Stream for dump output, if wanted
     );
 
-/// This function is an alternate entry point into the bytecode analysis
-/// library. It allows you to provide an arbitrary memory buffer which is
-/// assumed to contain a complete bytecode file. The \p Buffer is analyzed and
-/// the \p Results are filled in.
-/// @brief Analyze contents of a bytecode buffer.
-Module* AnalyzeBytecodeBuffer(
-       const unsigned char* Buffer, ///< Pointer to start of bytecode buffer
-       unsigned BufferSize,         ///< Size of the bytecode buffer
-       const std::string& ModuleID, ///< Identifier for the module
-       BytecodeAnalysis& Results,   ///< The results of the analysis
-       std::string* ErrorStr = 0,   ///< Errors, if any.
-       std::ostream* output = 0     ///< Stream for dump output, if wanted
-     );
 
 /// This function prints the contents of rhe BytecodeAnalysis structure in
 /// a human legible form.


Index: llvm/include/llvm/Bytecode/Archive.h
diff -u llvm/include/llvm/Bytecode/Archive.h:1.19 llvm/include/llvm/Bytecode/Archive.h:1.20
--- llvm/include/llvm/Bytecode/Archive.h:1.19	Sun Nov  5 13:31:28 2006
+++ llvm/include/llvm/Bytecode/Archive.h	Wed Feb  7 15:41:01 2007
@@ -20,6 +20,7 @@
 #include "llvm/ADT/ilist"
 #include "llvm/System/Path.h"
 #include "llvm/System/MappedFile.h"
+#include "llvm/Support/Compressor.h"
 #include <map>
 #include <set>
 #include <fstream>
@@ -32,6 +33,9 @@
 class Archive;             // Declared below
 class ArchiveMemberHeader; // Internal implementation class
 
+typedef size_t BCDecompressor_t(const char *, size_t, char*&, std::string*);
+
+
 /// This class is the main class manipulated by users of the Archive class. It
 /// holds information about one member of the Archive. It is also the element
 /// stored by the Archive's ilist, the Archive's main abstraction. Because of
@@ -223,7 +227,7 @@
 /// applications and the linkers. Consequently, the implementation of the class
 /// is optimized for reading.
 class Archive {
-
+  
   /// @name Types
   /// @{
   public:
@@ -468,7 +472,8 @@
   protected:
     /// @brief Construct an Archive for \p filename and optionally  map it
     /// into memory.
-    Archive(const sys::Path& filename);
+    Archive(const sys::Path& filename, BCDecompressor_t *BCDC = 
+            Compressor::decompressToNewBuffer);
 
     /// @param error Set to address of a std::string to get error messages
     /// @returns false on error
@@ -547,7 +552,7 @@
     unsigned firstFileOffset; ///< Offset to first normal file.
     ModuleMap modules;        ///< The modules loaded via symbol lookup.
     ArchiveMember* foreignST; ///< This holds the foreign symbol table.
-
+    BCDecompressor_t *Decompressor;  ///< Optional decompressor
   /// @}
   /// @name Hidden
   /// @{


Index: llvm/include/llvm/Bytecode/Reader.h
diff -u llvm/include/llvm/Bytecode/Reader.h:1.27 llvm/include/llvm/Bytecode/Reader.h:1.28
--- llvm/include/llvm/Bytecode/Reader.h:1.27	Wed Aug 30 15:47:48 2006
+++ llvm/include/llvm/Bytecode/Reader.h	Wed Feb  7 15:41:01 2007
@@ -19,16 +19,18 @@
 #ifndef LLVM_BYTECODE_READER_H
 #define LLVM_BYTECODE_READER_H
 
-#include "llvm/System/Path.h"
 #include "llvm/ModuleProvider.h"
 #include "llvm/Module.h"
-#include <string>
+#include "llvm/Support/Compressor.h"
+#include "llvm/System/Path.h"
 
 namespace llvm {
 
 // Forward declare the handler class
 class BytecodeHandler;
 
+typedef size_t BCDecompressor_t(const char *, size_t, char*&, std::string*);
+
 /// This function returns a ModuleProvider that can be used to do lazy 
 /// function-at-a-time loading from a bytecode file.
 /// @returns NULL on error
@@ -36,6 +38,7 @@
 /// @brief Get a ModuleProvide for a bytecode file.
 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
 );
@@ -49,6 +52,7 @@
   const unsigned char *Buffer,    ///< Start of buffer to parse
   unsigned BufferSize,            ///< Size of the buffer
   const std::string &ModuleID,    ///< Name to give the module
+  BCDecompressor_t *BCDC = Compressor::decompressToNewBuffer,
   std::string* ErrMsg = 0,        ///< Optional place to return an error message
   BytecodeHandler* H = 0          ///< Optional handler for reader events
 );
@@ -61,6 +65,7 @@
 /// @brief Parse the given bytecode file
 Module* ParseBytecodeFile(
   const std::string &Filename,    ///< Name of file to parse
+  BCDecompressor_t *BCDC = Compressor::decompressToNewBuffer,
   std::string *ErrMsg = 0         ///< Optional place to return an error message
 );
 
@@ -72,6 +77,7 @@
   const unsigned char *Buffer,    ///< Start of buffer to parse
   unsigned BufferSize,            ///< Size of the buffer
   const std::string &ModuleID="", ///< Name to give the module
+  BCDecompressor_t *BCDC = Compressor::decompressToNewBuffer,
   std::string *ErrMsg = 0         ///< Optional place to return an error message
 );
 
@@ -84,6 +90,7 @@
 bool GetBytecodeDependentLibraries(
   const std::string &fileName,       ///< File name to read bytecode from
   Module::LibraryListType& deplibs,  ///< List of dependent libraries extracted
+  BCDecompressor_t *BCDC = Compressor::decompressToNewBuffer,
   std::string* ErrMsg = 0            ///< Optional error message holder
 );
 
@@ -96,6 +103,7 @@
 bool GetBytecodeSymbols(
   const sys::Path& fileName,       ///< Filename to read bytecode from
   std::vector<std::string>& syms,  ///< Vector to return symbols in
+  BCDecompressor_t *BCDC = Compressor::decompressToNewBuffer,
   std::string* ErrMsg = 0          ///< Optional error message holder
 );
 
@@ -111,6 +119,7 @@
   unsigned Length,                   ///< The length of \p Buffer
   const std::string& ModuleID,       ///< An identifier for the module
   std::vector<std::string>& symbols, ///< The symbols defined in the module
+  BCDecompressor_t *BCDC = Compressor::decompressToNewBuffer,
   std::string* ErrMsg = 0            ///< Optional error message holder
 );
 






More information about the llvm-commits mailing list