LLVM  6.0.0svn
Classes | Public Types | Public Member Functions | Static Public Attributes | List of all members
llvm::BitstreamCursor Class Reference

This represents a position within a bitcode file, implemented on top of a SimpleBitstreamCursor. More...

#include "llvm/Bitcode/BitstreamReader.h"

Inheritance diagram for llvm::BitstreamCursor:
Inheritance graph
[legend]
Collaboration diagram for llvm::BitstreamCursor:
Collaboration graph
[legend]

Public Types

enum  { AF_DontPopBlockAtEnd = 1, AF_DontAutoprocessAbbrevs = 2 }
 Flags that modify the behavior of advance(). More...
 

Public Member Functions

 BitstreamCursor ()=default
 
 BitstreamCursor (ArrayRef< uint8_t > BitcodeBytes)
 
 BitstreamCursor (StringRef BitcodeBytes)
 
 BitstreamCursor (MemoryBufferRef BitcodeBytes)
 
unsigned getAbbrevIDWidth () const
 Return the number of bits used to encode an abbrev #. More...
 
BitstreamEntry advance (unsigned Flags=0)
 Advance the current bitstream, returning the next entry in the stream. More...
 
BitstreamEntry advanceSkippingSubblocks (unsigned Flags=0)
 This is a convenience function for clients that don't expect any subblocks. More...
 
unsigned ReadCode ()
 
unsigned ReadSubBlockID ()
 Having read the ENTER_SUBBLOCK code, read the BlockID for the block. More...
 
bool SkipBlock ()
 Having read the ENTER_SUBBLOCK abbrevid and a BlockID, skip over the body of this block. More...
 
bool EnterSubBlock (unsigned BlockID, unsigned *NumWordsP=nullptr)
 Having read the ENTER_SUBBLOCK abbrevid, enter the block, and return true if the block has an error. More...
 
bool ReadBlockEnd ()
 
const BitCodeAbbrevgetAbbrev (unsigned AbbrevID)
 Return the abbreviation for the specified AbbrevId. More...
 
unsigned skipRecord (unsigned AbbrevID)
 Read the current record and discard it, returning the code for the record. More...
 
unsigned readRecord (unsigned AbbrevID, SmallVectorImpl< uint64_t > &Vals, StringRef *Blob=nullptr)
 
void ReadAbbrevRecord ()
 
Optional< BitstreamBlockInfoReadBlockInfoBlock (bool ReadBlockInfoNames=false)
 Read and return a block info block from the bitstream. More...
 
void setBlockInfo (BitstreamBlockInfo *BI)
 Set the block info to be used by this BitstreamCursor to interpret abbreviated records. More...
 

Static Public Attributes

static const size_t MaxChunkSize = sizeof(word_t) * 8
 

Detailed Description

This represents a position within a bitcode file, implemented on top of a SimpleBitstreamCursor.

Unlike iterators, BitstreamCursors are heavy-weight objects that should not be passed by value.

Definition at line 312 of file BitstreamReader.h.

Member Enumeration Documentation

◆ anonymous enum

anonymous enum

Flags that modify the behavior of advance().

Enumerator
AF_DontPopBlockAtEnd 

If this flag is used, the advance() method does not automatically pop the block scope when the end of a block is reached.

AF_DontAutoprocessAbbrevs 

If this flag is used, abbrev entries are returned just like normal records.

Definition at line 359 of file BitstreamReader.h.

Constructor & Destructor Documentation

◆ BitstreamCursor() [1/4]

llvm::BitstreamCursor::BitstreamCursor ( )
default

◆ BitstreamCursor() [2/4]

llvm::BitstreamCursor::BitstreamCursor ( ArrayRef< uint8_t >  BitcodeBytes)
inlineexplicit

Definition at line 336 of file BitstreamReader.h.

◆ BitstreamCursor() [3/4]

llvm::BitstreamCursor::BitstreamCursor ( StringRef  BitcodeBytes)
inlineexplicit

Definition at line 338 of file BitstreamReader.h.

◆ BitstreamCursor() [4/4]

llvm::BitstreamCursor::BitstreamCursor ( MemoryBufferRef  BitcodeBytes)
inlineexplicit

Member Function Documentation

◆ advance()

BitstreamEntry llvm::BitstreamCursor::advance ( unsigned  Flags = 0)
inline

◆ advanceSkippingSubblocks()

BitstreamEntry llvm::BitstreamCursor::advanceSkippingSubblocks ( unsigned  Flags = 0)
inline

◆ EnterSubBlock()

bool BitstreamCursor::EnterSubBlock ( unsigned  BlockID,
unsigned NumWordsP = nullptr 
)

◆ getAbbrev()

const BitCodeAbbrev* llvm::BitstreamCursor::getAbbrev ( unsigned  AbbrevID)
inline

Return the abbreviation for the specified AbbrevId.

Definition at line 473 of file BitstreamReader.h.

References llvm::bitc::FIRST_APPLICATION_ABBREV, and llvm::report_fatal_error().

Referenced by readRecord(), and skipRecord().

◆ getAbbrevIDWidth()

unsigned llvm::BitstreamCursor::getAbbrevIDWidth ( ) const
inline

Return the number of bits used to encode an abbrev #.

Definition at line 356 of file BitstreamReader.h.

Referenced by jumpToValueSymbolTable().

◆ ReadAbbrevRecord()

void BitstreamCursor::ReadAbbrevRecord ( )

◆ ReadBlockEnd()

bool llvm::BitstreamCursor::ReadBlockEnd ( )
inline

◆ ReadBlockInfoBlock()

Optional< BitstreamBlockInfo > BitstreamCursor::ReadBlockInfoBlock ( bool  ReadBlockInfoNames = false)

◆ ReadCode()

unsigned llvm::BitstreamCursor::ReadCode ( )
inline

◆ readRecord()

unsigned BitstreamCursor::readRecord ( unsigned  AbbrevID,
SmallVectorImpl< uint64_t > &  Vals,
StringRef Blob = nullptr 
)

Definition at line 179 of file BitstreamReader.cpp.

References llvm::SmallVectorImpl< T >::append(), llvm::BitCodeAbbrevOp::Array, assert(), llvm::BitCodeAbbrevOp::Blob, llvm::SimpleBitstreamCursor::canSkipToPos(), llvm::BitCodeAbbrevOp::Char6, llvm::BitCodeAbbrevOp::DecodeChar6(), llvm::BitCodeAbbrevOp::Fixed, getAbbrev(), llvm::SimpleBitstreamCursor::GetCurrentBitNo(), llvm::BitCodeAbbrevOp::getEncoding(), llvm::BitCodeAbbrevOp::getEncodingData(), llvm::BitCodeAbbrevOp::getLiteralValue(), llvm::BitCodeAbbrev::getNumOperandInfos(), llvm::BitCodeAbbrev::getOperandInfo(), llvm::SimpleBitstreamCursor::getPointerToBit(), llvm::BitCodeAbbrevOp::isEncoding(), llvm::BitCodeAbbrevOp::isLiteral(), llvm::SimpleBitstreamCursor::JumpToBit(), llvm::SmallVectorTemplateBase< T, isPodLike >::push_back(), llvm::SimpleBitstreamCursor::Read(), readAbbreviatedField(), llvm::SimpleBitstreamCursor::ReadVBR(), llvm::SimpleBitstreamCursor::ReadVBR64(), llvm::report_fatal_error(), llvm::SimpleBitstreamCursor::skipToEnd(), llvm::SimpleBitstreamCursor::SkipToFourByteBoundary(), llvm::bitc::UNABBREV_RECORD, and llvm::BitCodeAbbrevOp::VBR.

Referenced by decodeLLVMAttributesForBitcode(), getAttrFromCode(), hasObjCCategoryInModule(), jumpToValueSymbolTable(), llvm::MetadataLoader::MetadataLoaderImpl::parseMetadata(), llvm::MetadataLoader::MetadataLoaderImpl::parseMetadataAttachment(), llvm::MetadataLoader::MetadataLoaderImpl::parseMetadataKinds(), readBlobInRecord(), ReadBlockInfoBlock(), readIdentificationBlock(), readModuleTriple(), readWideAPInt(), and llvm::MetadataLoader::MetadataLoaderImpl::upgradeDebugIntrinsics().

◆ ReadSubBlockID()

unsigned llvm::BitstreamCursor::ReadSubBlockID ( )
inline

Having read the ENTER_SUBBLOCK code, read the BlockID for the block.

Definition at line 421 of file BitstreamReader.h.

References llvm::bitc::BlockIDWidth.

◆ setBlockInfo()

void llvm::BitstreamCursor::setBlockInfo ( BitstreamBlockInfo BI)
inline

Set the block info to be used by this BitstreamCursor to interpret abbreviated records.

Definition at line 501 of file BitstreamReader.h.

Referenced by readTriple().

◆ SkipBlock()

bool llvm::BitstreamCursor::SkipBlock ( )
inline

Having read the ENTER_SUBBLOCK abbrevid and a BlockID, skip over the body of this block.

If the block record is malformed, return true.

Definition at line 427 of file BitstreamReader.h.

References llvm::BitstreamBlockInfo::BlockInfo::BlockID, llvm::bitc::BlockSizeWidth, and llvm::bitc::CodeLenWidth.

Referenced by llvm::getBitcodeFileContents(), llvm::BitcodeModule::getLTOInfo(), hasObjCCategory(), llvm::MetadataLoader::MetadataLoaderImpl::parseMetadata(), readBlobInRecord(), readIdentificationCode(), readTriple(), and readWideAPInt().

◆ skipRecord()

unsigned BitstreamCursor::skipRecord ( unsigned  AbbrevID)

Member Data Documentation

◆ MaxChunkSize

const size_t llvm::BitstreamCursor::MaxChunkSize = sizeof(word_t) * 8
static

The documentation for this class was generated from the following files: