31 : Stream(Stream), Diags(Diags) {}
34 llvm::Expected<std::vector<std::unique_ptr<Info>>>
readBitcode();
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);
49 template <
typename T> llvm::Error readSubBlock(
unsigned ID, T I);
53 template <
typename T> llvm::Error readRecord(
unsigned ID, T I);
57 llvm::Expected<std::unique_ptr<Info>> createInfo(
unsigned ID);
61 llvm::Expected<Cursor> skipUntilRecordOrBlock(
unsigned &BlockOrRecordID);
64 llvm::Expected<std::unique_ptr<Info>> readBlockToInfo(
unsigned ID);
66 template <
typename InfoType,
typename T,
typename CallbackFunction>
67 llvm::Error handleSubBlock(
unsigned ID, T Parent, CallbackFunction Function);
69 template <
typename InfoType,
typename T,
typename CallbackFunction>
70 llvm::Error handleTypeSubBlock(
unsigned ID, T Parent,
71 CallbackFunction Function);
73 llvm::BitstreamCursor &Stream;
74 std::optional<llvm::BitstreamBlockInfo> BlockInfo;
75 FieldId CurrentReferenceField;
76 DiagnosticsEngine &Diags;