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);
48 template <
typename T,
typename BlockBeginHandler,
typename BlockEndHandler,
49 typename RecordHandler>
50 llvm::Error parseBlock(
unsigned ID, T I, BlockBeginHandler &&BBH,
51 BlockEndHandler &&BEH, RecordHandler &&RH);
54 template <
typename T> llvm::Error readSubBlock(
unsigned ID, T I);
58 template <
typename T> llvm::Error readRecord(
unsigned ID, T I);
61 template <
typename T> llvm::Expected<OwnedPtr<Info>> createInfo(
unsigned ID);
65 llvm::Expected<Cursor> skipUntilRecordOrBlock(
unsigned &BlockOrRecordID);
68 llvm::Expected<OwnedPtr<Info>> readBlockToInfo(
unsigned ID);
70 template <
typename InfoType,
typename T,
typename CallbackFunction>
71 llvm::Error handleSubBlock(
unsigned ID, T Parent, CallbackFunction Function);
73 template <
typename InfoType,
typename T,
typename CallbackFunction>
74 llvm::Error handleTypeSubBlock(
unsigned ID, T Parent,
75 CallbackFunction Function);
77 llvm::BitstreamCursor &Stream;
78 std::optional<llvm::BitstreamBlockInfo> BlockInfo;
79 FieldId CurrentReferenceField;
80 DiagnosticsEngine &Diags;