aboutsummaryrefslogtreecommitdiff
path: root/clang-tools-extra/clang-doc/BitcodeReader.cpp
diff options
context:
space:
mode:
authorDiego Astiazaran <diegoaat97@gmail.com>2019-08-16 00:10:49 +0000
committerDiego Astiazaran <diegoaat97@gmail.com>2019-08-16 00:10:49 +0000
commitba3d595f93a45965adb4f47bfc57e28c00ba8942 (patch)
treeee16fc68101e6222c8bb9cf10f93f994f74cf423 /clang-tools-extra/clang-doc/BitcodeReader.cpp
parent76053297bd779ae13bd456c8ddbd405754ee39f2 (diff)
downloadllvm-ba3d595f93a45965adb4f47bfc57e28c00ba8942.zip
llvm-ba3d595f93a45965adb4f47bfc57e28c00ba8942.tar.gz
llvm-ba3d595f93a45965adb4f47bfc57e28c00ba8942.tar.bz2
[clang-doc] Serialize inherited attributes and methods
clang-doc now serializes the inherited attributes and methods, not only the name of the base class. All inherited are tracked, if B:A and C:B, info of A is included in C. This data is stored in attribute Bases in a RecordInfo. Previously tracked inheritance data, stored in Parents and VParents, hasn't been removed to reduce review load. Differential revision: https://reviews.llvm.org/D66238 llvm-svn: 369075
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))