//===- BitcodeReader.cpp - Internal BitcodeReader implementation ----------===////// The LLVM Compiler Infrastructure//// This file was developed by Chris Lattner and is distributed under// the University of Illinois Open Source License. See LICENSE.TXT for details.////===----------------------------------------------------------------------===////// This header defines the BitcodeReader class.////===----------------------------------------------------------------------===//#include"llvm/Bitcode/ReaderWriter.h"#include"BitcodeReader.h"#include"llvm/Constants.h"#include"llvm/DerivedTypes.h"#include"llvm/Instructions.h"#include"llvm/Module.h"#include"llvm/ADT/SmallString.h"#include"llvm/Support/MathExtras.h"#include"llvm/Support/MemoryBuffer.h"usingnamespacellvm;BitcodeReader::~BitcodeReader(){deleteBuffer;}/// ConvertToString - Convert a string from a record into an std::string, return/// true on failure.template<typenameStrTy>staticboolConvertToString(SmallVector<uint64_t,64>&Record,unsignedIdx,StrTy&Result){if(Record.size()<Idx+1||Record.size()<Record[Idx]+Idx+1)returntrue;for(unsignedi=0,e=Record[Idx];i!=e;++i)Result+=(char)Record[Idx+i+1];returnfalse;}staticGlobalValue::LinkageTypesGetDecodedLinkage(unsignedVal){switch(Val){default:// Map unknown/new linkages to externalcase0:returnGlobalValue::ExternalLinkage;case1:returnGlobalValue::WeakLinkage;case2:returnGlobalValue::AppendingLinkage;case3:returnGlobalValue::InternalLinkage;case4:returnGlobalValue::LinkOnceLinkage;case5:returnGlobalValue::DLLImportLinkage;case6:returnGlobalValue::DLLExportLinkage;case7:returnGlobalValue::ExternalWeakLinkage;}}staticGlobalValue::VisibilityTypesGetDecodedVisibility(unsignedVal){switch(Val){default:// Map unknown visibilities to default.case0:returnGlobalValue::DefaultVisibility;case1:returnGlobalValue::HiddenVisibility;case2:returnGlobalValue::ProtectedVisibility;}}staticintGetDecodedCastOpcode(unsignedVal){switch(Val){default:return-1;casebitc::CAST_TRUNC:returnInstruction::Trunc;casebitc::CAST_ZEXT:returnInstruction::ZExt;casebitc::CAST_SEXT:returnInstruction::SExt;casebitc::CAST_FPTOUI:returnInstruction::FPToUI;casebitc::CAST_FPTOSI:returnInstruction::FPToSI;casebitc::CAST_UITOFP:returnInstruction::UIToFP;casebitc::CAST_SITOFP:returnInstruction::SIToFP;