aboutsummaryrefslogtreecommitdiff
path: root/lib/Bitcode/Reader/Deserialize.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2007-10-24 19:06:40 +0000
committerTed Kremenek <kremenek@apple.com>2007-10-24 19:06:40 +0000
commit6e9b49664357bf970ebabc94ce3295ec5f41413b (patch)
tree1ce826794cbe38fce1c7bb292dc5bae94731ff18 /lib/Bitcode/Reader/Deserialize.cpp
parentbe3e348c7ccf0158d91fe4c9497a94c59dd5c025 (diff)
Split Serialization.h into separate headers: Serialize.h and
Deserialize.h Serialization.h now includes trait speciailizations for unsigned long, etc. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43307 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Bitcode/Reader/Deserialize.cpp')
-rw-r--r--lib/Bitcode/Reader/Deserialize.cpp43
1 files changed, 26 insertions, 17 deletions
diff --git a/lib/Bitcode/Reader/Deserialize.cpp b/lib/Bitcode/Reader/Deserialize.cpp
index ccd929a440..cf5fe205eb 100644
--- a/lib/Bitcode/Reader/Deserialize.cpp
+++ b/lib/Bitcode/Reader/Deserialize.cpp
@@ -11,7 +11,7 @@
//
//===----------------------------------------------------------------------===//
-#include "llvm/Bitcode/Serialization.h"
+#include "llvm/Bitcode/Deserialize.h"
using namespace llvm;
@@ -27,31 +27,29 @@ Deserializer::~Deserializer() {
void Deserializer::ReadRecord() {
// FIXME: Check if we haven't run off the edge of the stream.
// FIXME: Handle abbreviations.
- unsigned Code = Stream.ReadCode();
+
// FIXME: Check for the correct code.
- assert (Record.size() == 0);
-
- Stream.ReadRecord(Code,Record);
-
+ unsigned Code = Stream.ReadCode();
+
+ assert (Record.size() == 0);
+ Stream.ReadRecord(Code,Record);
assert (Record.size() > 0);
}
-uint64_t Deserializer::ReadInt(unsigned Bits) {
+uint64_t Deserializer::ReadInt() {
// FIXME: Any error recovery/handling with incomplete or bad files?
if (!inRecord())
ReadRecord();
- // FIXME: check for loss of precision in read (compare to Bits)
return Record[RecIdx++];
}
-char* Deserializer::ReadCString(char* cstr, unsigned MaxLen, bool isNullTerm) {
+char* Deserializer::ReadCStr(char* cstr, unsigned MaxLen, bool isNullTerm) {
if (cstr == NULL)
MaxLen = 0; // Zero this just in case someone does something funny.
- unsigned len = ReadInt(32);
+ unsigned len = ReadInt();
- // FIXME: perform dynamic checking of lengths?
assert (MaxLen == 0 || (len + (isNullTerm ? 1 : 0)) <= MaxLen);
if (!cstr)
@@ -60,7 +58,7 @@ char* Deserializer::ReadCString(char* cstr, unsigned MaxLen, bool isNullTerm) {
assert (cstr != NULL);
for (unsigned i = 0; i < len; ++i)
- cstr[i] = ReadInt(8);
+ cstr[i] = (char) ReadInt();
if (isNullTerm)
cstr[len+1] = '\0';
@@ -68,16 +66,27 @@ char* Deserializer::ReadCString(char* cstr, unsigned MaxLen, bool isNullTerm) {
return cstr;
}
-void Deserializer::ReadCString(std::vector<char>& buff, bool isNullTerm) {
- buff.clear();
+void Deserializer::ReadCStr(std::vector<char>& buff, bool isNullTerm) {
+ unsigned len = ReadInt();
- unsigned len = ReadInt(32);
-
+ buff.clear();
buff.reserve(len);
for (unsigned i = 0; i < len; ++i)
- buff.push_back(ReadInt(8));
+ buff.push_back((char) ReadInt());
if (isNullTerm)
buff.push_back('\0');
}
+
+
+#define INT_READ(TYPE)\
+void SerializeTrait<TYPE>::Read(Deserializer& D, TYPE& X) {\
+ X = (TYPE) D.ReadInt(); }
+
+INT_READ(bool)
+INT_READ(unsigned char)
+INT_READ(unsigned short)
+INT_READ(unsigned int)
+INT_READ(unsigned long)
+INT_READ(unsigned long long)