diff options
author | Dimitry Andric <dim@FreeBSD.org> | 2024-01-24 19:17:23 +0000 |
---|---|---|
committer | Dimitry Andric <dim@FreeBSD.org> | 2024-04-06 20:13:49 +0000 |
commit | 7a6dacaca14b62ca4b74406814becb87a3fefac0 (patch) | |
tree | 273a870ac27484bb1f5ee55e7ef0dc0d061f63e7 /contrib/llvm-project/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp | |
parent | 46c59ea9b61755455ff6bf9f3e7b834e1af634ea (diff) | |
parent | 4df029cc74e5ec124f14a5682e44999ce4f086df (diff) |
Diffstat (limited to 'contrib/llvm-project/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp')
-rw-r--r-- | contrib/llvm-project/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp | 74 |
1 files changed, 37 insertions, 37 deletions
diff --git a/contrib/llvm-project/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp b/contrib/llvm-project/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp index 53b22297ee0e..349b93e2a232 100644 --- a/contrib/llvm-project/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp +++ b/contrib/llvm-project/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp @@ -147,46 +147,40 @@ Object serializeSourceRange(const PresumedLoc &BeginLoc, /// Serialize the availability attributes of a symbol. /// /// Availability information contains the introduced, deprecated, and obsoleted -/// versions of the symbol for a given domain (roughly corresponds to a -/// platform) as semantic versions, if not default. Availability information -/// also contains flags to indicate if the symbol is unconditionally unavailable -/// or deprecated, i.e. \c __attribute__((unavailable)) and \c -/// __attribute__((deprecated)). +/// versions of the symbol as semantic versions, if not default. +/// Availability information also contains flags to indicate if the symbol is +/// unconditionally unavailable or deprecated, +/// i.e. \c __attribute__((unavailable)) and \c __attribute__((deprecated)). /// /// \returns \c std::nullopt if the symbol has default availability attributes, -/// or an \c Array containing the formatted availability information. -std::optional<Array> -serializeAvailability(const AvailabilitySet &Availabilities) { - if (Availabilities.isDefault()) +/// or an \c Array containing an object with the formatted availability +/// information. +std::optional<Array> serializeAvailability(const AvailabilityInfo &Avail) { + if (Avail.isDefault()) return std::nullopt; + Object Availability; Array AvailabilityArray; - - if (Availabilities.isUnconditionallyDeprecated()) { + Availability["domain"] = Avail.Domain; + serializeObject(Availability, "introduced", + serializeSemanticVersion(Avail.Introduced)); + serializeObject(Availability, "deprecated", + serializeSemanticVersion(Avail.Deprecated)); + serializeObject(Availability, "obsoleted", + serializeSemanticVersion(Avail.Obsoleted)); + if (Avail.isUnconditionallyDeprecated()) { Object UnconditionallyDeprecated; UnconditionallyDeprecated["domain"] = "*"; UnconditionallyDeprecated["isUnconditionallyDeprecated"] = true; AvailabilityArray.emplace_back(std::move(UnconditionallyDeprecated)); } - - // Note unconditionally unavailable records are skipped. - - for (const auto &AvailInfo : Availabilities) { - Object Availability; - Availability["domain"] = AvailInfo.Domain; - if (AvailInfo.Unavailable) - Availability["isUnconditionallyUnavailable"] = true; - else { - serializeObject(Availability, "introduced", - serializeSemanticVersion(AvailInfo.Introduced)); - serializeObject(Availability, "deprecated", - serializeSemanticVersion(AvailInfo.Deprecated)); - serializeObject(Availability, "obsoleted", - serializeSemanticVersion(AvailInfo.Obsoleted)); - } - AvailabilityArray.emplace_back(std::move(Availability)); + if (Avail.isUnconditionallyUnavailable()) { + Object UnconditionallyUnavailable; + UnconditionallyUnavailable["domain"] = "*"; + UnconditionallyUnavailable["isUnconditionallyUnavailable"] = true; + AvailabilityArray.emplace_back(std::move(UnconditionallyUnavailable)); } - + AvailabilityArray.emplace_back(std::move(Availability)); return AvailabilityArray; } @@ -406,7 +400,7 @@ Object serializeSymbolKind(APIRecord::RecordKind RK, Language Lang) { Kind["identifier"] = AddLangPrefix("struct"); Kind["displayName"] = "Structure"; break; - case APIRecord::RK_CXXField: + case APIRecord::RK_UnionField: Kind["identifier"] = AddLangPrefix("property"); Kind["displayName"] = "Instance Property"; break; @@ -414,6 +408,10 @@ Object serializeSymbolKind(APIRecord::RecordKind RK, Language Lang) { Kind["identifier"] = AddLangPrefix("union"); Kind["displayName"] = "Union"; break; + case APIRecord::RK_CXXField: + Kind["identifier"] = AddLangPrefix("property"); + Kind["displayName"] = "Instance Property"; + break; case APIRecord::RK_StaticField: Kind["identifier"] = AddLangPrefix("type.property"); Kind["displayName"] = "Type Property"; @@ -738,7 +736,7 @@ bool SymbolGraphSerializer::shouldSkip(const APIRecord &Record) const { return true; // Skip unconditionally unavailable symbols - if (Record.Availabilities.isUnconditionallyUnavailable()) + if (Record.Availability.isUnconditionallyUnavailable()) return true; // Filter out symbols prefixed with an underscored as they are understood to @@ -764,7 +762,7 @@ SymbolGraphSerializer::serializeAPIRecord(const RecordTy &Record) const { Obj, "location", serializeSourceLocation(Record.Location, /*IncludeFileURI=*/true)); serializeArray(Obj, "availability", - serializeAvailability(Record.Availabilities)); + serializeAvailability(Record.Availability)); serializeObject(Obj, "docComment", serializeDocComment(Record.Comment)); serializeArray(Obj, "declarationFragments", serializeDeclarationFragments(Record.Declaration)); @@ -877,12 +875,12 @@ void SymbolGraphSerializer::visitEnumRecord(const EnumRecord &Record) { serializeMembers(Record, Record.Constants); } -void SymbolGraphSerializer::visitStructRecord(const StructRecord &Record) { - auto Struct = serializeAPIRecord(Record); - if (!Struct) +void SymbolGraphSerializer::visitRecordRecord(const RecordRecord &Record) { + auto SerializedRecord = serializeAPIRecord(Record); + if (!SerializedRecord) return; - Symbols.emplace_back(std::move(*Struct)); + Symbols.emplace_back(std::move(*SerializedRecord)); serializeMembers(Record, Record.Fields); } @@ -1173,7 +1171,9 @@ void SymbolGraphSerializer::serializeSingleRecord(const APIRecord *Record) { visitEnumRecord(*cast<EnumRecord>(Record)); break; case APIRecord::RK_Struct: - visitStructRecord(*cast<StructRecord>(Record)); + LLVM_FALLTHROUGH; + case APIRecord::RK_Union: + visitRecordRecord(*cast<RecordRecord>(Record)); break; case APIRecord::RK_StaticField: visitStaticFieldRecord(*cast<StaticFieldRecord>(Record)); |