aboutsummaryrefslogtreecommitdiff
path: root/clang-tools-extra/clang-doc/BitcodeReader.cpp
diff options
context:
space:
mode:
authorErick Velez <erickvelez7@gmail.com>2025-06-24 11:36:31 -0700
committerGitHub <noreply@github.com>2025-06-24 11:36:31 -0700
commitb8ea65025dc68eab516f3e3dfc94d7c0a4a1b912 (patch)
treed23a23e395ebd5683581da00a120e17102b5e2cd /clang-tools-extra/clang-doc/BitcodeReader.cpp
parentde2ec228c03c3072782b6fbcb43388a4556b90b2 (diff)
downloadllvm-b8ea65025dc68eab516f3e3dfc94d7c0a4a1b912.zip
llvm-b8ea65025dc68eab516f3e3dfc94d7c0a4a1b912.tar.gz
llvm-b8ea65025dc68eab516f3e3dfc94d7c0a4a1b912.tar.bz2
[clang-doc] document global variables (#145070)
Visit and map VarDecls to document variables declared in namespace scope.
Diffstat (limited to 'clang-tools-extra/clang-doc/BitcodeReader.cpp')
-rw-r--r--clang-tools-extra/clang-doc/BitcodeReader.cpp40
1 files changed, 40 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-doc/BitcodeReader.cpp b/clang-tools-extra/clang-doc/BitcodeReader.cpp
index 6685293..cbdd5d2 100644
--- a/clang-tools-extra/clang-doc/BitcodeReader.cpp
+++ b/clang-tools-extra/clang-doc/BitcodeReader.cpp
@@ -93,6 +93,7 @@ static llvm::Error decodeRecord(const Record &R, InfoType &Field,
case InfoType::IT_enum:
case InfoType::IT_typedef:
case InfoType::IT_concept:
+ case InfoType::IT_variable:
Field = IT;
return llvm::Error::success();
}
@@ -416,6 +417,23 @@ static llvm::Error parseRecord(const Record &R, unsigned ID,
"invalid field for ConstraintInfo");
}
+static llvm::Error parseRecord(const Record &R, unsigned ID,
+ llvm::StringRef Blob, VarInfo *I) {
+ switch (ID) {
+ case VAR_USR:
+ return decodeRecord(R, I->USR, Blob);
+ case VAR_NAME:
+ return decodeRecord(R, I->Name, Blob);
+ case VAR_DEFLOCATION:
+ return decodeRecord(R, I->DefLoc, Blob);
+ case VAR_IS_STATIC:
+ return decodeRecord(R, I->IsStatic, Blob);
+ default:
+ return llvm::createStringError(llvm::inconvertibleErrorCode(),
+ "invalid field for VarInfo");
+ }
+}
+
template <typename T> static llvm::Expected<CommentInfo *> getCommentInfo(T I) {
return llvm::createStringError(llvm::inconvertibleErrorCode(),
"invalid type cannot contain CommentInfo");
@@ -458,6 +476,10 @@ template <> llvm::Expected<CommentInfo *> getCommentInfo(ConceptInfo *I) {
return &I->Description.emplace_back();
}
+template <> Expected<CommentInfo *> getCommentInfo(VarInfo *I) {
+ return &I->Description.emplace_back();
+}
+
// When readSubBlock encounters a TypeInfo sub-block, it calls addTypeInfo on
// the parent block to set it. The template specializations define what to do
// for each supported parent block.
@@ -497,6 +519,11 @@ template <> llvm::Error addTypeInfo(TypedefInfo *I, TypeInfo &&T) {
return llvm::Error::success();
}
+template <> llvm::Error addTypeInfo(VarInfo *I, TypeInfo &&T) {
+ I->Type = std::move(T);
+ return llvm::Error::success();
+}
+
template <typename T>
static llvm::Error addReference(T I, Reference &&R, FieldId F) {
return llvm::createStringError(llvm::inconvertibleErrorCode(),
@@ -643,6 +670,9 @@ template <> void addChild(NamespaceInfo *I, TypedefInfo &&R) {
template <> void addChild(NamespaceInfo *I, ConceptInfo &&R) {
I->Children.Concepts.emplace_back(std::move(R));
}
+template <> void addChild(NamespaceInfo *I, VarInfo &&R) {
+ I->Children.Variables.emplace_back(std::move(R));
+}
// Record children:
template <> void addChild(RecordInfo *I, FunctionInfo &&R) {
@@ -887,6 +917,13 @@ llvm::Error ClangDocBitcodeReader::readSubBlock(unsigned ID, T I) {
addChild(I, std::move(CI));
return llvm::Error::success();
}
+ case BI_VAR_BLOCK_ID: {
+ VarInfo VI;
+ if (auto Err = readBlock(ID, &VI))
+ return Err;
+ addChild(I, std::move(VI));
+ return llvm::Error::success();
+ }
default:
return llvm::createStringError(llvm::inconvertibleErrorCode(),
"invalid subblock type");
@@ -996,6 +1033,8 @@ ClangDocBitcodeReader::readBlockToInfo(unsigned ID) {
return createInfo<ConceptInfo>(ID);
case BI_FUNCTION_BLOCK_ID:
return createInfo<FunctionInfo>(ID);
+ case BI_VAR_BLOCK_ID:
+ return createInfo<VarInfo>(ID);
default:
return llvm::createStringError(llvm::inconvertibleErrorCode(),
"cannot create info");
@@ -1035,6 +1074,7 @@ ClangDocBitcodeReader::readBitcode() {
case BI_ENUM_BLOCK_ID:
case BI_TYPEDEF_BLOCK_ID:
case BI_CONCEPT_BLOCK_ID:
+ case BI_VAR_BLOCK_ID:
case BI_FUNCTION_BLOCK_ID: {
auto InfoOrErr = readBlockToInfo(ID);
if (!InfoOrErr)