diff options
author | Zixu Wang <zixu_wang@apple.com> | 2022-03-21 19:11:29 -0700 |
---|---|---|
committer | Zixu Wang <zixu_wang@apple.com> | 2022-03-23 09:45:06 -0700 |
commit | 5bb5704c1b35023b8a6217a6eb7d98a47efe1ca2 (patch) | |
tree | dfdf6f8149f31b13fc83902a211b55cbd5ca8119 /clang/lib/ExtractAPI/API.cpp | |
parent | 311bdbc9b73f7aadc37be4285c74576600b9bdba (diff) | |
download | llvm-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.cpp | 27 |
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); |