BitcodeReader.h revision caee0dccffb77a003681345ab3281bcf8684526c
1caee0dccffb77a003681345ab3281bcf8684526cChris Lattner//===- BitcodeReader.h - Internal BitcodeReader impl ------------*- C++ -*-===// 2caee0dccffb77a003681345ab3281bcf8684526cChris Lattner// 3caee0dccffb77a003681345ab3281bcf8684526cChris Lattner// The LLVM Compiler Infrastructure 4caee0dccffb77a003681345ab3281bcf8684526cChris Lattner// 5caee0dccffb77a003681345ab3281bcf8684526cChris Lattner// This file was developed by Chris Lattner and is distributed under 6caee0dccffb77a003681345ab3281bcf8684526cChris Lattner// the University of Illinois Open Source License. See LICENSE.TXT for details. 7caee0dccffb77a003681345ab3281bcf8684526cChris Lattner// 8caee0dccffb77a003681345ab3281bcf8684526cChris Lattner//===----------------------------------------------------------------------===// 9caee0dccffb77a003681345ab3281bcf8684526cChris Lattner// 10caee0dccffb77a003681345ab3281bcf8684526cChris Lattner// This header defines the BitcodeReader class. 11caee0dccffb77a003681345ab3281bcf8684526cChris Lattner// 12caee0dccffb77a003681345ab3281bcf8684526cChris Lattner//===----------------------------------------------------------------------===// 13caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 14caee0dccffb77a003681345ab3281bcf8684526cChris Lattner#ifndef BITCODE_READER_H 15caee0dccffb77a003681345ab3281bcf8684526cChris Lattner#define BITCODE_READER_H 16caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 17caee0dccffb77a003681345ab3281bcf8684526cChris Lattner#include "llvm/AbstractTypeUser.h" 18caee0dccffb77a003681345ab3281bcf8684526cChris Lattner#include "llvm/ModuleProvider.h" 19caee0dccffb77a003681345ab3281bcf8684526cChris Lattner#include "../LLVMBitCodes.h" 20caee0dccffb77a003681345ab3281bcf8684526cChris Lattner#include <vector> 21caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 22caee0dccffb77a003681345ab3281bcf8684526cChris Lattnernamespace llvm { 23caee0dccffb77a003681345ab3281bcf8684526cChris Lattner class BitstreamReader; 24caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 25caee0dccffb77a003681345ab3281bcf8684526cChris Lattnerclass BitcodeReader : public ModuleProvider { 26caee0dccffb77a003681345ab3281bcf8684526cChris Lattner const char *ErrorString; 27caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 28caee0dccffb77a003681345ab3281bcf8684526cChris Lattner std::vector<PATypeHolder> TypeList; 29caee0dccffb77a003681345ab3281bcf8684526cChris Lattnerpublic: 30caee0dccffb77a003681345ab3281bcf8684526cChris Lattner virtual ~BitcodeReader() {} 31caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 32caee0dccffb77a003681345ab3281bcf8684526cChris Lattner virtual void FreeState() {} 33caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 34caee0dccffb77a003681345ab3281bcf8684526cChris Lattner virtual bool materializeFunction(Function *F, std::string *ErrInfo = 0) { 35caee0dccffb77a003681345ab3281bcf8684526cChris Lattner // FIXME: TODO 36caee0dccffb77a003681345ab3281bcf8684526cChris Lattner return false; 37caee0dccffb77a003681345ab3281bcf8684526cChris Lattner } 38caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 39caee0dccffb77a003681345ab3281bcf8684526cChris Lattner virtual Module *materializeModule(std::string *ErrInfo = 0) { 40caee0dccffb77a003681345ab3281bcf8684526cChris Lattner // FIXME: TODO 41caee0dccffb77a003681345ab3281bcf8684526cChris Lattner //if (ParseAllFunctionBodies(ErrMsg)) 42caee0dccffb77a003681345ab3281bcf8684526cChris Lattner // return 0; 43caee0dccffb77a003681345ab3281bcf8684526cChris Lattner return TheModule; 44caee0dccffb77a003681345ab3281bcf8684526cChris Lattner } 45caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 46caee0dccffb77a003681345ab3281bcf8684526cChris Lattner bool Error(const char *Str) { 47caee0dccffb77a003681345ab3281bcf8684526cChris Lattner ErrorString = Str; 48caee0dccffb77a003681345ab3281bcf8684526cChris Lattner return true; 49caee0dccffb77a003681345ab3281bcf8684526cChris Lattner } 50caee0dccffb77a003681345ab3281bcf8684526cChris Lattner const char *getErrorString() const { return ErrorString; } 51caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 52caee0dccffb77a003681345ab3281bcf8684526cChris Lattner /// @brief Main interface to parsing a bitcode buffer. 53caee0dccffb77a003681345ab3281bcf8684526cChris Lattner /// @returns true if an error occurred. 54caee0dccffb77a003681345ab3281bcf8684526cChris Lattner bool ParseBitcode(unsigned char *Buf, unsigned Length, 55caee0dccffb77a003681345ab3281bcf8684526cChris Lattner const std::string &ModuleID); 56caee0dccffb77a003681345ab3281bcf8684526cChris Lattnerprivate: 57caee0dccffb77a003681345ab3281bcf8684526cChris Lattner const Type *getTypeByID(unsigned ID, bool isTypeTable = false); 58caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 59caee0dccffb77a003681345ab3281bcf8684526cChris Lattner bool ParseModule(BitstreamReader &Stream, const std::string &ModuleID); 60caee0dccffb77a003681345ab3281bcf8684526cChris Lattner bool ParseTypeTable(BitstreamReader &Stream); 61caee0dccffb77a003681345ab3281bcf8684526cChris Lattner bool ParseTypeSymbolTable(BitstreamReader &Stream); 62caee0dccffb77a003681345ab3281bcf8684526cChris Lattner}; 63caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 64caee0dccffb77a003681345ab3281bcf8684526cChris Lattner} // End llvm namespace 65caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 66caee0dccffb77a003681345ab3281bcf8684526cChris Lattner#endif 67