[llvm-commits] CVS: llvm/lib/Bytecode/Reader/ReaderPrimitives.h ArchiveReader.cpp ReaderInternals.h
Chris Lattner
lattner at cs.uiuc.edu
Sat Jan 10 13:01:13 PST 2004
Changes in directory llvm/lib/Bytecode/Reader:
ReaderPrimitives.h added (r1.1)
ArchiveReader.cpp updated: 1.14 -> 1.15
ReaderInternals.h updated: 1.69 -> 1.70
---
Log message:
* finegrainify namespacification of ArchiveReader.cpp
* Refactor reader stuff out of include/llvm/Bytecode/Primitives.h. This is
internal implementation details for the reader, not public interfaces!
---
Diffs of the changes: (+158 -7)
Index: llvm/lib/Bytecode/Reader/ReaderPrimitives.h
diff -c /dev/null llvm/lib/Bytecode/Reader/ReaderPrimitives.h:1.1
*** /dev/null Sat Jan 10 13:00:25 2004
--- llvm/lib/Bytecode/Reader/ReaderPrimitives.h Sat Jan 10 13:00:15 2004
***************
*** 0 ****
--- 1,154 ----
+ //===-- ReaderPrimitives.h - Bytecode file format reading prims -*- C++ -*-===//
+ //
+ // The LLVM Compiler Infrastructure
+ //
+ // This file was developed by the LLVM research group and is distributed under
+ // the University of Illinois Open Source License. See LICENSE.TXT for details.
+ //
+ //===----------------------------------------------------------------------===//
+ //
+ // This header defines some basic functions for reading basic primitive types
+ // from a bytecode stream.
+ //
+ //===----------------------------------------------------------------------===//
+
+ #ifndef READERPRIMITIVES_H
+ #define READERPRIMITIVES_H
+
+ #include "Support/DataTypes.h"
+ #include <string>
+
+ namespace llvm {
+
+ static inline bool read(const unsigned char *&Buf, const unsigned char *EndBuf,
+ unsigned &Result) {
+ if (Buf+4 > EndBuf) return true;
+ #ifdef ENDIAN_LITTLE
+ Result = *(unsigned*)Buf;
+ #else
+ Result = Buf[0] | (Buf[1] << 8) | (Buf[2] << 16) | (Buf[3] << 24);
+ #endif
+ Buf += 4;
+ return false;
+ }
+
+ static inline bool read(const unsigned char *&Buf, const unsigned char *EndBuf,
+ uint64_t &Result) {
+ if (Buf+8 > EndBuf) return true;
+
+ #ifdef ENDIAN_LITTLE
+ Result = *(uint64_t*)Buf;
+ #else
+ Result = Buf[0] | (Buf[1] << 8) | (Buf[2] << 16) | (Buf[3] << 24) |
+ ((uint64_t)(Buf[4] | (Buf[5] << 8) | (Buf[6] << 16) | (Buf[7] << 24)) <<32);
+ #endif
+ Buf += 8;
+ return false;
+ }
+
+ static inline bool read(const unsigned char *&Buf, const unsigned char *EndBuf,
+ int &Result) {
+ return read(Buf, EndBuf, (unsigned &)Result);
+ }
+
+ static inline bool read(const unsigned char *&Buf, const unsigned char *EndBuf,
+ int64_t &Result) {
+ return read(Buf, EndBuf, (uint64_t &)Result);
+ }
+
+
+ // read_vbr - Read an unsigned integer encoded in variable bitrate format.
+ //
+ static inline bool read_vbr(const unsigned char *&Buf,
+ const unsigned char *EndBuf, unsigned &Result) {
+ unsigned Shift = Result = 0;
+
+ do {
+ Result |= (unsigned)((*Buf++) & 0x7F) << Shift;
+ Shift += 7;
+ } while (Buf[-1] & 0x80 && Buf < EndBuf);
+
+ return Buf > EndBuf;
+ }
+
+ static inline bool read_vbr(const unsigned char *&Buf,
+ const unsigned char *EndBuf, uint64_t &Result) {
+ unsigned Shift = 0; Result = 0;
+
+ do {
+ Result |= (uint64_t)((*Buf++) & 0x7F) << Shift;
+ Shift += 7;
+ } while (Buf[-1] & 0x80 && Buf < EndBuf);
+ return Buf > EndBuf;
+ }
+
+ // read_vbr (signed) - Read a signed number stored in sign-magnitude format
+ static inline bool read_vbr(const unsigned char *&Buf,
+ const unsigned char *EndBuf, int &Result) {
+ unsigned R;
+ if (read_vbr(Buf, EndBuf, R)) return true;
+ if (R & 1)
+ Result = -(int)(R >> 1);
+ else
+ Result = (int)(R >> 1);
+
+ return false;
+ }
+
+
+ static inline bool read_vbr(const unsigned char *&Buf,
+ const unsigned char *EndBuf, int64_t &Result) {
+ uint64_t R;
+ if (read_vbr(Buf, EndBuf, R)) return true;
+ if (R & 1)
+ Result = -(int64_t)(R >> 1);
+ else
+ Result = (int64_t)(R >> 1);
+
+ return false;
+ }
+
+ // align32 - Round up to multiple of 32 bits...
+ static inline bool align32(const unsigned char *&Buf,
+ const unsigned char *EndBuf) {
+ Buf = (const unsigned char *)((unsigned long)(Buf+3) & (~3UL));
+ return Buf > EndBuf;
+ }
+
+ static inline bool read(const unsigned char *&Buf, const unsigned char *EndBuf,
+ std::string &Result, bool Aligned = true) {
+ unsigned Size;
+ if (read_vbr(Buf, EndBuf, Size)) return true; // Failure reading size?
+ if (Buf+Size > EndBuf) return true; // Size invalid?
+
+ Result = std::string((char*)Buf, Size);
+ Buf += Size;
+
+ if (Aligned) // If we should stay aligned do so...
+ if (align32(Buf, EndBuf)) return true; // Failure aligning?
+
+ return false;
+ }
+
+ static inline bool input_data(const unsigned char *&Buf,
+ const unsigned char *EndBuf,
+ void *Ptr, void *End, bool Align = false) {
+ unsigned char *Start = (unsigned char *)Ptr;
+ unsigned Amount = (unsigned char *)End - Start;
+ if (Buf+Amount > EndBuf) return true;
+ #ifdef ENDIAN_LITTLE
+ std::copy(Buf, Buf+Amount, Start);
+ Buf += Amount;
+ #else
+ unsigned char *E = (unsigned char *)End;
+ while (Ptr != E)
+ *--E = *Buf++;
+ #endif
+
+ if (Align) return align32(Buf, EndBuf);
+ return false;
+ }
+
+ } // End llvm namespace
+
+ #endif
Index: llvm/lib/Bytecode/Reader/ArchiveReader.cpp
diff -u llvm/lib/Bytecode/Reader/ArchiveReader.cpp:1.14 llvm/lib/Bytecode/Reader/ArchiveReader.cpp:1.15
--- llvm/lib/Bytecode/Reader/ArchiveReader.cpp:1.14 Tue Dec 30 01:40:35 2003
+++ llvm/lib/Bytecode/Reader/ArchiveReader.cpp Sat Jan 10 13:00:15 2004
@@ -22,8 +22,7 @@
#include "Config/sys/mman.h"
#include "Config/fcntl.h"
#include <cstdlib>
-
-namespace llvm {
+using namespace llvm;
namespace {
struct ar_hdr {
@@ -162,8 +161,8 @@
// true on error, or false on success. This does not support reading files from
// standard input.
//
-bool ReadArchiveFile(const std::string &Filename, std::vector<Module*> &Objects,
- std::string *ErrorStr) {
+bool llvm::ReadArchiveFile(const std::string &Filename,
+ std::vector<Module*> &Objects,std::string *ErrorStr){
int Length = getFileSize(Filename);
if (Length == -1)
return Error(ErrorStr, "Error getting file length!");
@@ -192,5 +191,3 @@
return Result;
}
-
-} // End llvm namespace
Index: llvm/lib/Bytecode/Reader/ReaderInternals.h
diff -u llvm/lib/Bytecode/Reader/ReaderInternals.h:1.69 llvm/lib/Bytecode/Reader/ReaderInternals.h:1.70
--- llvm/lib/Bytecode/Reader/ReaderInternals.h:1.69 Mon Dec 1 01:05:30 2003
+++ llvm/lib/Bytecode/Reader/ReaderInternals.h Sat Jan 10 13:00:15 2004
@@ -14,11 +14,11 @@
#ifndef READER_INTERNALS_H
#define READER_INTERNALS_H
+#include "ReaderPrimitives.h"
#include "llvm/Constants.h"
#include "llvm/DerivedTypes.h"
#include "llvm/Function.h"
#include "llvm/ModuleProvider.h"
-#include "llvm/Bytecode/Primitives.h"
#include <utility>
#include <map>
More information about the llvm-commits
mailing list