31 : Stream(Stream), Diags(Diags) {}
37 enum class Cursor { BadBlock = 1,
Record, BlockEnd, BlockBegin };
40 llvm::Error validateStream();
41 llvm::Error readVersion();
42 llvm::Error readBlockInfoBlock();
46 template <
typename T> llvm::Error readBlock(
unsigned ID, T I);
47 template <
typename T> llvm::Error readBlockWithNamespace(
unsigned ID, T I);
49 template <
typename T,
typename BlockBeginHandler,
typename BlockEndHandler,
50 typename RecordHandler>
51 llvm::Error parseBlock(
unsigned ID, T I, BlockBeginHandler &&BBH,
52 BlockEndHandler &&BEH, RecordHandler &&RH);
54 template <
typename T,
typename BlockBeginHandler,
typename BlockEndHandler>
55 llvm::Error parseBlock(
unsigned ID, T I, BlockBeginHandler &&BBH,
56 BlockEndHandler &&BEH);
58 template <
typename ChildType>
59 llvm::Expected<bool> readSubBlockIfMatch(
unsigned ID,
unsigned TargetID,
67 template <
typename InfoT>
71 std::initializer_list<ReferenceMap> Mappings = {});
74 template <
typename T> llvm::Error readSubBlock(
unsigned ID, T I);
78 template <
typename T> llvm::Error readRecord(
unsigned ID, T I);
81 template <
typename T> llvm::Expected<Info *> createInfo(
unsigned ID);
85 llvm::Expected<Cursor> skipUntilRecordOrBlock(
unsigned &BlockOrRecordID);
88 llvm::Expected<Info *> readBlockToInfo(
unsigned ID);
90 template <
typename InfoType,
typename T,
typename CallbackFunction>
91 llvm::Error handleSubBlock(
unsigned ID, T Parent, CallbackFunction Function);
93 template <
typename InfoType,
typename T>
94 llvm::Error handleSubBlock(
unsigned ID, T Parent);
96 template <
typename InfoType,
typename T,
typename CallbackFunction>
97 llvm::Error handleTypeSubBlock(
unsigned ID, T Parent,
98 CallbackFunction Function);
100 llvm::BitstreamCursor &Stream;
101 std::optional<llvm::BitstreamBlockInfo> BlockInfo;
103 DiagnosticsEngine &Diags;