LLVM  4.0.0
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 <BitstreamReader.h>

Inheritance diagram for llvm::BitstreamCursor:
[legend]
Collaboration diagram for llvm::BitstreamCursor:
[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

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

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

Definition at line 336 of file BitstreamReader.h.

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

Definition at line 338 of file BitstreamReader.h.

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

Definition at line 340 of file BitstreamReader.h.

Member Function Documentation

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

This is a convenience function for clients that don't expect any subblocks.

This just skips over them automatically.

Definition at line 400 of file BitstreamReader.h.

References advance(), fuzzer::Flags, llvm::BitstreamEntry::getError(), llvm::BitstreamEntry::Kind, SkipBlock(), and llvm::BitstreamEntry::SubBlock.

Referenced by ReadBlockInfoBlock().

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

Having read the ENTER_SUBBLOCK abbrevid, enter the block, and return true if the block has an error.

EnterSubBlock - Having read the ENTER_SUBBLOCK abbrevid, enter the block, and return true if the block has an error.

Definition at line 23 of file BitstreamReader.cpp.

References llvm::SimpleBitstreamCursor::AtEndOfStream(), llvm::SmallVectorTemplateCommon< T, typename >::back(), llvm::bitc::BlockSizeWidth, llvm::bitc::CodeLenWidth, llvm::BitstreamBlockInfo::getBlockInfo(), MaxChunkSize, llvm::SmallVectorTemplateBase< T, isPodLike >::push_back(), llvm::SimpleBitstreamCursor::Read(), llvm::SimpleBitstreamCursor::ReadVBR(), and llvm::SimpleBitstreamCursor::SkipToFourByteBoundary().

Referenced by llvm::BitcodeModule::hasSummary(), and ReadBlockInfoBlock().

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().

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

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

Definition at line 356 of file BitstreamReader.h.

void BitstreamCursor::ReadAbbrevRecord ( )
bool llvm::BitstreamCursor::ReadBlockEnd ( )
inline
Optional< BitstreamBlockInfo > BitstreamCursor::ReadBlockInfoBlock ( bool  ReadBlockInfoNames = false)
unsigned llvm::BitstreamCursor::ReadCode ( )
inline

Definition at line 413 of file BitstreamReader.h.

References llvm::SimpleBitstreamCursor::Read().

Referenced by advance().

unsigned BitstreamCursor::readRecord ( unsigned  AbbrevID,
SmallVectorImpl< uint64_t > &  Vals,
StringRef Blob = nullptr 
)
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, and llvm::SimpleBitstreamCursor::ReadVBR().

Referenced by advance().

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.

bool llvm::BitstreamCursor::SkipBlock ( )
inline
unsigned BitstreamCursor::skipRecord ( unsigned  AbbrevID)

Member Data Documentation

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

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