diff options
author | Diego Astiazaran <diegoaat97@gmail.com> | 2019-08-16 00:10:49 +0000 |
---|---|---|
committer | Diego Astiazaran <diegoaat97@gmail.com> | 2019-08-16 00:10:49 +0000 |
commit | ba3d595f93a45965adb4f47bfc57e28c00ba8942 (patch) | |
tree | ee16fc68101e6222c8bb9cf10f93f994f74cf423 /clang-tools-extra/clang-doc/BitcodeReader.cpp | |
parent | 76053297bd779ae13bd456c8ddbd405754ee39f2 (diff) | |
download | llvm-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.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)) |