//==- Serialize.cpp - Generic Object Serialization to Bitcode ----*- C++ -*-==// // // The LLVM Compiler Infrastructure // // This file was developed by Ted Kremenek and is distributed under the // University of Illinois Open Source License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This file defines the internal methods used for object serialization. // //===----------------------------------------------------------------------===// #include "llvm/Bitcode/Serialization.h" using namespace llvm; Serializer::Serializer(BitstreamWriter& stream, unsigned BlockID) : Stream(stream), inBlock(BlockID >= 8) { if (inBlock) Stream.EnterSubblock(8,3); } Serializer::~Serializer() { if (inRecord()) EmitRecord(); if (inBlock) Stream.ExitBlock(); Stream.FlushToWord(); } void Serializer::EmitRecord() { assert(Record.size() > 0 && "Cannot emit empty record."); Stream.EmitRecord(8,Record); Record.clear(); } void Serializer::EmitInt(unsigned X, unsigned bits) { Record.push_back(X); } void Serializer::EmitCString(const char* cstr) { unsigned l = strlen(cstr); Record.push_back(l); for (unsigned i = 0; i < l; i++) Record.push_back(cstr[i]); EmitRecord(); }