diff options
author | Daniel Grumberg <dgrumberg@apple.com> | 2022-08-01 14:55:08 +0100 |
---|---|---|
committer | Daniel Grumberg <dgrumberg@apple.com> | 2022-08-19 14:54:52 -0700 |
commit | 57c9780d60b15baf0eba4393857affce47f60aa7 (patch) | |
tree | 4c09c5a234530d67fc61dc11e8e5fe8cc62d046c /clang/lib/ExtractAPI/API.cpp | |
parent | 89aaae57eacf77a6902ef8d4af5c92a3d6c642c2 (diff) | |
download | llvm-57c9780d60b15baf0eba4393857affce47f60aa7.zip llvm-57c9780d60b15baf0eba4393857affce47f60aa7.tar.gz llvm-57c9780d60b15baf0eba4393857affce47f60aa7.tar.bz2 |
[clang][ExtractAPI] Record availability information on all platforms
Currently ExtractAPI only emits availability information for the
current platform. This makes it easy for clients to get all availability
information for a given symbol in one invocation as opposed to having to invoke
clang once per-platform and then merge the symbol-graphs.
Differential Revision: https://reviews.llvm.org/D130918
Diffstat (limited to 'clang/lib/ExtractAPI/API.cpp')
-rw-r--r-- | clang/lib/ExtractAPI/API.cpp | 118 |
1 files changed, 64 insertions, 54 deletions
diff --git a/clang/lib/ExtractAPI/API.cpp b/clang/lib/ExtractAPI/API.cpp index 073e36f..8ab03a8 100644 --- a/clang/lib/ExtractAPI/API.cpp +++ b/clang/lib/ExtractAPI/API.cpp @@ -43,68 +43,77 @@ RecordTy *addTopLevelRecord(APISet::RecordMap<RecordTy> &RecordMap, GlobalVariableRecord * APISet::addGlobalVar(StringRef Name, StringRef USR, PresumedLoc Loc, - const AvailabilityInfo &Availability, LinkageInfo Linkage, + AvailabilitySet Availabilities, LinkageInfo Linkage, const DocComment &Comment, DeclarationFragments Fragments, DeclarationFragments SubHeading) { - return addTopLevelRecord(GlobalVariables, USR, Name, Loc, Availability, - Linkage, Comment, Fragments, SubHeading); + return addTopLevelRecord(GlobalVariables, USR, Name, Loc, + std::move(Availabilities), Linkage, Comment, + Fragments, SubHeading); } GlobalFunctionRecord *APISet::addGlobalFunction( StringRef Name, StringRef USR, PresumedLoc Loc, - const AvailabilityInfo &Availability, LinkageInfo Linkage, + AvailabilitySet Availabilities, LinkageInfo Linkage, const DocComment &Comment, DeclarationFragments Fragments, DeclarationFragments SubHeading, FunctionSignature Signature) { - return addTopLevelRecord(GlobalFunctions, USR, Name, Loc, Availability, - Linkage, Comment, Fragments, SubHeading, Signature); + return addTopLevelRecord(GlobalFunctions, USR, Name, Loc, + std::move(Availabilities), Linkage, Comment, + Fragments, SubHeading, Signature); } -EnumConstantRecord *APISet::addEnumConstant( - EnumRecord *Enum, StringRef Name, StringRef USR, PresumedLoc Loc, - const AvailabilityInfo &Availability, const DocComment &Comment, - DeclarationFragments Declaration, DeclarationFragments SubHeading) { +EnumConstantRecord *APISet::addEnumConstant(EnumRecord *Enum, StringRef Name, + StringRef USR, PresumedLoc Loc, + AvailabilitySet Availabilities, + const DocComment &Comment, + DeclarationFragments Declaration, + DeclarationFragments SubHeading) { auto Record = std::make_unique<EnumConstantRecord>( - USR, Name, Loc, Availability, Comment, Declaration, SubHeading); + USR, Name, Loc, std::move(Availabilities), Comment, Declaration, + SubHeading); return Enum->Constants.emplace_back(std::move(Record)).get(); } EnumRecord *APISet::addEnum(StringRef Name, StringRef USR, PresumedLoc Loc, - const AvailabilityInfo &Availability, + AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading) { - return addTopLevelRecord(Enums, USR, Name, Loc, Availability, Comment, - Declaration, SubHeading); + return addTopLevelRecord(Enums, USR, Name, Loc, std::move(Availabilities), + Comment, Declaration, SubHeading); } StructFieldRecord *APISet::addStructField(StructRecord *Struct, StringRef Name, StringRef USR, PresumedLoc Loc, - const AvailabilityInfo &Availability, + AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading) { auto Record = std::make_unique<StructFieldRecord>( - USR, Name, Loc, Availability, Comment, Declaration, SubHeading); + USR, Name, Loc, std::move(Availabilities), Comment, Declaration, + SubHeading); return Struct->Fields.emplace_back(std::move(Record)).get(); } StructRecord *APISet::addStruct(StringRef Name, StringRef USR, PresumedLoc Loc, - const AvailabilityInfo &Availability, + AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading) { - return addTopLevelRecord(Structs, USR, Name, Loc, Availability, Comment, - Declaration, SubHeading); + return addTopLevelRecord(Structs, USR, Name, Loc, std::move(Availabilities), + Comment, Declaration, SubHeading); } -ObjCCategoryRecord *APISet::addObjCCategory( - StringRef Name, StringRef USR, PresumedLoc Loc, - const AvailabilityInfo &Availability, const DocComment &Comment, - DeclarationFragments Declaration, DeclarationFragments SubHeading, - SymbolReference Interface) { +ObjCCategoryRecord *APISet::addObjCCategory(StringRef Name, StringRef USR, + PresumedLoc Loc, + AvailabilitySet Availabilities, + const DocComment &Comment, + DeclarationFragments Declaration, + DeclarationFragments SubHeading, + SymbolReference Interface) { // Create the category record. - auto *Record = addTopLevelRecord(ObjCCategories, USR, Name, Loc, Availability, - Comment, Declaration, SubHeading, Interface); + auto *Record = addTopLevelRecord(ObjCCategories, USR, Name, Loc, + std::move(Availabilities), Comment, + Declaration, SubHeading, Interface); // If this category is extending a known interface, associate it with the // ObjCInterfaceRecord. @@ -117,56 +126,57 @@ ObjCCategoryRecord *APISet::addObjCCategory( ObjCInterfaceRecord *APISet::addObjCInterface( StringRef Name, StringRef USR, PresumedLoc Loc, - const AvailabilityInfo &Availability, LinkageInfo Linkage, + AvailabilitySet Availabilities, LinkageInfo Linkage, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, SymbolReference SuperClass) { - return addTopLevelRecord(ObjCInterfaces, USR, Name, Loc, Availability, - Linkage, Comment, Declaration, SubHeading, - SuperClass); + return addTopLevelRecord(ObjCInterfaces, USR, Name, Loc, + std::move(Availabilities), Linkage, Comment, + Declaration, SubHeading, SuperClass); } ObjCMethodRecord *APISet::addObjCMethod( ObjCContainerRecord *Container, StringRef Name, StringRef USR, - PresumedLoc Loc, const AvailabilityInfo &Availability, - const DocComment &Comment, DeclarationFragments Declaration, - DeclarationFragments SubHeading, FunctionSignature Signature, - bool IsInstanceMethod) { + PresumedLoc Loc, AvailabilitySet Availabilities, const DocComment &Comment, + DeclarationFragments Declaration, DeclarationFragments SubHeading, + FunctionSignature Signature, bool IsInstanceMethod) { auto Record = std::make_unique<ObjCMethodRecord>( - USR, Name, Loc, Availability, Comment, Declaration, SubHeading, Signature, - IsInstanceMethod); + USR, Name, Loc, std::move(Availabilities), Comment, Declaration, + SubHeading, Signature, IsInstanceMethod); return Container->Methods.emplace_back(std::move(Record)).get(); } ObjCPropertyRecord *APISet::addObjCProperty( ObjCContainerRecord *Container, StringRef Name, StringRef USR, - PresumedLoc Loc, const AvailabilityInfo &Availability, - const DocComment &Comment, DeclarationFragments Declaration, - DeclarationFragments SubHeading, + PresumedLoc Loc, AvailabilitySet Availabilities, const DocComment &Comment, + DeclarationFragments Declaration, DeclarationFragments SubHeading, ObjCPropertyRecord::AttributeKind Attributes, StringRef GetterName, StringRef SetterName, bool IsOptional) { auto Record = std::make_unique<ObjCPropertyRecord>( - USR, Name, Loc, Availability, Comment, Declaration, SubHeading, - Attributes, GetterName, SetterName, IsOptional); + USR, Name, Loc, std::move(Availabilities), Comment, Declaration, + SubHeading, Attributes, GetterName, SetterName, IsOptional); return Container->Properties.emplace_back(std::move(Record)).get(); } ObjCInstanceVariableRecord *APISet::addObjCInstanceVariable( ObjCContainerRecord *Container, StringRef Name, StringRef USR, - PresumedLoc Loc, const AvailabilityInfo &Availability, - const DocComment &Comment, DeclarationFragments Declaration, - DeclarationFragments SubHeading, + PresumedLoc Loc, AvailabilitySet Availabilities, const DocComment &Comment, + DeclarationFragments Declaration, DeclarationFragments SubHeading, ObjCInstanceVariableRecord::AccessControl Access) { auto Record = std::make_unique<ObjCInstanceVariableRecord>( - USR, Name, Loc, Availability, Comment, Declaration, SubHeading, Access); + USR, Name, Loc, std::move(Availabilities), Comment, Declaration, + SubHeading, Access); return Container->Ivars.emplace_back(std::move(Record)).get(); } -ObjCProtocolRecord *APISet::addObjCProtocol( - StringRef Name, StringRef USR, PresumedLoc Loc, - const AvailabilityInfo &Availability, const DocComment &Comment, - DeclarationFragments Declaration, DeclarationFragments SubHeading) { - return addTopLevelRecord(ObjCProtocols, USR, Name, Loc, Availability, Comment, - Declaration, SubHeading); +ObjCProtocolRecord *APISet::addObjCProtocol(StringRef Name, StringRef USR, + PresumedLoc Loc, + AvailabilitySet Availabilities, + const DocComment &Comment, + DeclarationFragments Declaration, + DeclarationFragments SubHeading) { + return addTopLevelRecord(ObjCProtocols, USR, Name, Loc, + std::move(Availabilities), Comment, Declaration, + SubHeading); } MacroDefinitionRecord * @@ -178,13 +188,13 @@ APISet::addMacroDefinition(StringRef Name, StringRef USR, PresumedLoc Loc, TypedefRecord *APISet::addTypedef(StringRef Name, StringRef USR, PresumedLoc Loc, - const AvailabilityInfo &Availability, + AvailabilitySet Availabilities, const DocComment &Comment, DeclarationFragments Declaration, DeclarationFragments SubHeading, SymbolReference UnderlyingType) { - return addTopLevelRecord(Typedefs, USR, Name, Loc, Availability, Comment, - Declaration, SubHeading, UnderlyingType); + return addTopLevelRecord(Typedefs, USR, Name, Loc, std::move(Availabilities), + Comment, Declaration, SubHeading, UnderlyingType); } StringRef APISet::recordUSR(const Decl *D) { |