BitcodeReader.h revision 0b2482a1ebd07a3b1cec660681add46c927970f2
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 17cb403d69fb620d4df66233d27a6f8c545ce0d0e4Jeff Cohen#include "llvm/Type.h" 18caee0dccffb77a003681345ab3281bcf8684526cChris Lattner#include "llvm/ModuleProvider.h" 1947f96bf24687b5068aec7166cb8b3ac33ae964aeChris Lattner#include "llvm/Bitcode/LLVMBitCodes.h" 20caee0dccffb77a003681345ab3281bcf8684526cChris Lattner#include <vector> 21caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 22caee0dccffb77a003681345ab3281bcf8684526cChris Lattnernamespace llvm { 23caee0dccffb77a003681345ab3281bcf8684526cChris Lattner class BitstreamReader; 240b2482a1ebd07a3b1cec660681add46c927970f2Chris Lattner class Value; 25caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 26caee0dccffb77a003681345ab3281bcf8684526cChris Lattnerclass BitcodeReader : public ModuleProvider { 27caee0dccffb77a003681345ab3281bcf8684526cChris Lattner const char *ErrorString; 28caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 29caee0dccffb77a003681345ab3281bcf8684526cChris Lattner std::vector<PATypeHolder> TypeList; 300b2482a1ebd07a3b1cec660681add46c927970f2Chris Lattner std::vector<Value*> ValueList; 31caee0dccffb77a003681345ab3281bcf8684526cChris Lattnerpublic: 32caee0dccffb77a003681345ab3281bcf8684526cChris Lattner virtual ~BitcodeReader() {} 33caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 34caee0dccffb77a003681345ab3281bcf8684526cChris Lattner virtual void FreeState() {} 35caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 36caee0dccffb77a003681345ab3281bcf8684526cChris Lattner virtual bool materializeFunction(Function *F, std::string *ErrInfo = 0) { 37caee0dccffb77a003681345ab3281bcf8684526cChris Lattner // FIXME: TODO 38caee0dccffb77a003681345ab3281bcf8684526cChris Lattner return false; 39caee0dccffb77a003681345ab3281bcf8684526cChris Lattner } 40caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 41caee0dccffb77a003681345ab3281bcf8684526cChris Lattner virtual Module *materializeModule(std::string *ErrInfo = 0) { 42caee0dccffb77a003681345ab3281bcf8684526cChris Lattner // FIXME: TODO 43caee0dccffb77a003681345ab3281bcf8684526cChris Lattner //if (ParseAllFunctionBodies(ErrMsg)) 44caee0dccffb77a003681345ab3281bcf8684526cChris Lattner // return 0; 45caee0dccffb77a003681345ab3281bcf8684526cChris Lattner return TheModule; 46caee0dccffb77a003681345ab3281bcf8684526cChris Lattner } 47caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 48caee0dccffb77a003681345ab3281bcf8684526cChris Lattner bool Error(const char *Str) { 49caee0dccffb77a003681345ab3281bcf8684526cChris Lattner ErrorString = Str; 50caee0dccffb77a003681345ab3281bcf8684526cChris Lattner return true; 51caee0dccffb77a003681345ab3281bcf8684526cChris Lattner } 52caee0dccffb77a003681345ab3281bcf8684526cChris Lattner const char *getErrorString() const { return ErrorString; } 53caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 54caee0dccffb77a003681345ab3281bcf8684526cChris Lattner /// @brief Main interface to parsing a bitcode buffer. 55caee0dccffb77a003681345ab3281bcf8684526cChris Lattner /// @returns true if an error occurred. 56caee0dccffb77a003681345ab3281bcf8684526cChris Lattner bool ParseBitcode(unsigned char *Buf, unsigned Length, 57caee0dccffb77a003681345ab3281bcf8684526cChris Lattner const std::string &ModuleID); 58caee0dccffb77a003681345ab3281bcf8684526cChris Lattnerprivate: 59caee0dccffb77a003681345ab3281bcf8684526cChris Lattner const Type *getTypeByID(unsigned ID, bool isTypeTable = false); 60caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 61caee0dccffb77a003681345ab3281bcf8684526cChris Lattner bool ParseModule(BitstreamReader &Stream, const std::string &ModuleID); 62caee0dccffb77a003681345ab3281bcf8684526cChris Lattner bool ParseTypeTable(BitstreamReader &Stream); 63caee0dccffb77a003681345ab3281bcf8684526cChris Lattner bool ParseTypeSymbolTable(BitstreamReader &Stream); 640b2482a1ebd07a3b1cec660681add46c927970f2Chris Lattner bool ParseValueSymbolTable(BitstreamReader &Stream); 65caee0dccffb77a003681345ab3281bcf8684526cChris Lattner}; 66caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 67caee0dccffb77a003681345ab3281bcf8684526cChris Lattner} // End llvm namespace 68caee0dccffb77a003681345ab3281bcf8684526cChris Lattner 69caee0dccffb77a003681345ab3281bcf8684526cChris Lattner#endif 70