diff options
Diffstat (limited to 'clang-tools-extra/clang-doc/BitcodeReader.cpp')
-rw-r--r-- | clang-tools-extra/clang-doc/BitcodeReader.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-doc/BitcodeReader.cpp b/clang-tools-extra/clang-doc/BitcodeReader.cpp index 7004840..7b523ee 100644 --- a/clang-tools-extra/clang-doc/BitcodeReader.cpp +++ b/clang-tools-extra/clang-doc/BitcodeReader.cpp @@ -180,6 +180,29 @@ llvm::Error parseRecord(Record R, unsigned ID, llvm::StringRef Blob, } llvm::Error parseRecord(Record R, unsigned ID, llvm::StringRef Blob, + BaseRecordInfo *I) { + switch (ID) { + case BASE_RECORD_USR: + return decodeRecord(R, I->USR, Blob); + case BASE_RECORD_NAME: + return decodeRecord(R, I->Name, Blob); + case BASE_RECORD_PATH: + return decodeRecord(R, I->Path, Blob); + case BASE_RECORD_TAG_TYPE: + return decodeRecord(R, I->TagType, Blob); + case BASE_RECORD_IS_VIRTUAL: + return decodeRecord(R, I->IsVirtual, Blob); + case BASE_RECORD_ACCESS: + return decodeRecord(R, I->Access, Blob); + case BASE_RECORD_IS_PARENT: + return decodeRecord(R, I->IsParent, Blob); + default: + return llvm::make_error<llvm::StringError>( + "Invalid field for BaseRecordInfo.\n", llvm::inconvertibleErrorCode()); + } +} + +llvm::Error parseRecord(Record R, unsigned ID, llvm::StringRef Blob, EnumInfo *I) { switch (ID) { case ENUM_USR: @@ -350,6 +373,11 @@ template <> llvm::Error addTypeInfo(RecordInfo *I, MemberTypeInfo &&T) { return llvm::Error::success(); } +template <> llvm::Error addTypeInfo(BaseRecordInfo *I, MemberTypeInfo &&T) { + I->Members.emplace_back(std::move(T)); + return llvm::Error::success(); +} + template <> llvm::Error addTypeInfo(FunctionInfo *I, TypeInfo &&T) { I->ReturnType = std::move(T); return llvm::Error::success(); @@ -494,6 +522,14 @@ template <> void addChild(RecordInfo *I, EnumInfo &&R) { I->ChildEnums.emplace_back(std::move(R)); } +template <> void addChild(RecordInfo *I, BaseRecordInfo &&R) { + I->Bases.emplace_back(std::move(R)); +} + +template <> void addChild(BaseRecordInfo *I, FunctionInfo &&R) { + I->ChildFunctions.emplace_back(std::move(R)); +} + // Read records from bitcode into a given info. template <typename T> llvm::Error ClangDocBitcodeReader::readRecord(unsigned ID, T I) { @@ -598,6 +634,13 @@ llvm::Error ClangDocBitcodeReader::readSubBlock(unsigned ID, T I) { addChild(I, std::move(F)); return llvm::Error::success(); } + case BI_BASE_RECORD_BLOCK_ID: { + BaseRecordInfo BR; + if (auto Err = readBlock(ID, &BR)) + return Err; + addChild(I, std::move(BR)); + return llvm::Error::success(); + } case BI_ENUM_BLOCK_ID: { EnumInfo E; if (auto Err = readBlock(ID, &E)) |