aboutsummaryrefslogtreecommitdiff
path: root/clang-tools-extra/clang-doc/BitcodeReader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'clang-tools-extra/clang-doc/BitcodeReader.cpp')
-rw-r--r--clang-tools-extra/clang-doc/BitcodeReader.cpp43
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))