aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/ExtractAPI/API.cpp
diff options
context:
space:
mode:
authorZixu Wang <zixu_wang@apple.com>2022-03-21 19:11:29 -0700
committerZixu Wang <zixu_wang@apple.com>2022-03-23 09:45:06 -0700
commit5bb5704c1b35023b8a6217a6eb7d98a47efe1ca2 (patch)
treedfdf6f8149f31b13fc83902a211b55cbd5ca8119 /clang/lib/ExtractAPI/API.cpp
parent311bdbc9b73f7aadc37be4285c74576600b9bdba (diff)
downloadllvm-5bb5704c1b35023b8a6217a6eb7d98a47efe1ca2.zip
llvm-5bb5704c1b35023b8a6217a6eb7d98a47efe1ca2.tar.gz
llvm-5bb5704c1b35023b8a6217a6eb7d98a47efe1ca2.tar.bz2
[clang][extract-api] Add struct support
- Add `StructFieldRecord` and `StructRecord` to store API information for structs - Implement `VisitRecordDecl` in `ExtractAPIVisitor` - Implement Symbol Graph serialization for struct records. - Add test case for struct records. Depends on D121873 Differential Revision: https://reviews.llvm.org/D122202
Diffstat (limited to 'clang/lib/ExtractAPI/API.cpp')
-rw-r--r--clang/lib/ExtractAPI/API.cpp27
1 files changed, 27 insertions, 0 deletions
diff --git a/clang/lib/ExtractAPI/API.cpp b/clang/lib/ExtractAPI/API.cpp
index fd9e92c..7aa8233 100644
--- a/clang/lib/ExtractAPI/API.cpp
+++ b/clang/lib/ExtractAPI/API.cpp
@@ -84,6 +84,33 @@ EnumRecord *APISet::addEnum(StringRef Name, StringRef USR, PresumedLoc Loc,
return Result.first->second.get();
}
+StructFieldRecord *APISet::addStructField(StructRecord *Struct, StringRef Name,
+ StringRef USR, PresumedLoc Loc,
+ const AvailabilityInfo &Availability,
+ const DocComment &Comment,
+ DeclarationFragments Declaration,
+ DeclarationFragments SubHeading) {
+ auto Record =
+ APIRecordUniquePtr<StructFieldRecord>(new (Allocator) StructFieldRecord{
+ Name, USR, Loc, Availability, Comment, Declaration, SubHeading});
+ return Struct->Fields.emplace_back(std::move(Record)).get();
+}
+
+StructRecord *APISet::addStruct(StringRef Name, StringRef USR, PresumedLoc Loc,
+ const AvailabilityInfo &Availability,
+ const DocComment &Comment,
+ DeclarationFragments Declaration,
+ DeclarationFragments SubHeading) {
+ auto Result = Structs.insert({Name, nullptr});
+ if (Result.second) {
+ // Create the record if it does not already exist.
+ auto Record = APIRecordUniquePtr<StructRecord>(new (Allocator) StructRecord{
+ Name, USR, Loc, Availability, Comment, Declaration, SubHeading});
+ Result.first->second = std::move(Record);
+ }
+ return Result.first->second.get();
+}
+
StringRef APISet::recordUSR(const Decl *D) {
SmallString<128> USR;
index::generateUSRForDecl(D, USR);