aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
diff options
context:
space:
mode:
authorZixu Wang <zixu_wang@apple.com>2022-03-25 11:43:44 -0700
committerZixu Wang <zixu_wang@apple.com>2022-03-29 10:06:08 -0700
commit15bf0e567375c977cf7d7b48465eb1561e890b54 (patch)
tree15278bfbd9173bd90a16b3c6723412ce7613d55b /clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
parentef6f7c4a60836b052a0c6d995280d19eafa31b39 (diff)
downloadllvm-15bf0e567375c977cf7d7b48465eb1561e890b54.zip
llvm-15bf0e567375c977cf7d7b48465eb1561e890b54.tar.gz
llvm-15bf0e567375c977cf7d7b48465eb1561e890b54.tar.bz2
[clang][extract-api] Use correct language info from inputs
The current way of getting the `clang::Language` from `LangOptions` does not handle Objective-C correctly because `clang::Language::ObjC` does not correspond to any `LangStandard`. This patch passes the correct `Language` from the frontend input information. Differential Revision: https://reviews.llvm.org/D122495
Diffstat (limited to 'clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp')
-rw-r--r--clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp24
1 files changed, 10 insertions, 14 deletions
diff --git a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
index 54276f6..cde81ec 100644
--- a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
+++ b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
@@ -151,11 +151,9 @@ Optional<Object> serializeAvailability(const AvailabilityInfo &Avail) {
return Availbility;
}
-/// Get the short language name string for interface language references.
-StringRef getLanguageName(const LangOptions &LangOpts) {
- auto LanguageKind =
- LangStandard::getLangStandardForKind(LangOpts.LangStd).getLanguage();
- switch (LanguageKind) {
+/// Get the language name string for interface language references.
+StringRef getLanguageName(Language Lang) {
+ switch (Lang) {
case Language::C:
return "c";
case Language::ObjC:
@@ -185,11 +183,10 @@ StringRef getLanguageName(const LangOptions &LangOpts) {
///
/// The identifier property of a symbol contains the USR for precise and unique
/// references, and the interface language name.
-Object serializeIdentifier(const APIRecord &Record,
- const LangOptions &LangOpts) {
+Object serializeIdentifier(const APIRecord &Record, Language Lang) {
Object Identifier;
Identifier["precise"] = Record.USR;
- Identifier["interfaceLanguage"] = getLanguageName(LangOpts);
+ Identifier["interfaceLanguage"] = getLanguageName(Lang);
return Identifier;
}
@@ -335,10 +332,9 @@ Object serializeNames(const APIRecord &Record) {
/// The Symbol Graph symbol kind property contains a shorthand \c identifier
/// which is prefixed by the source language name, useful for tooling to parse
/// the kind, and a \c displayName for rendering human-readable names.
-Object serializeSymbolKind(const APIRecord &Record,
- const LangOptions &LangOpts) {
- auto AddLangPrefix = [&LangOpts](StringRef S) -> std::string {
- return (getLanguageName(LangOpts) + "." + S).str();
+Object serializeSymbolKind(const APIRecord &Record, Language Lang) {
+ auto AddLangPrefix = [&Lang](StringRef S) -> std::string {
+ return (getLanguageName(Lang) + "." + S).str();
};
Object Kind;
@@ -420,8 +416,8 @@ SymbolGraphSerializer::serializeAPIRecord(const APIRecord &Record) const {
Object Obj;
serializeObject(Obj, "identifier",
- serializeIdentifier(Record, API.getLangOpts()));
- serializeObject(Obj, "kind", serializeSymbolKind(Record, API.getLangOpts()));
+ serializeIdentifier(Record, API.getLanguage()));
+ serializeObject(Obj, "kind", serializeSymbolKind(Record, API.getLanguage()));
serializeObject(Obj, "names", serializeNames(Record));
serializeObject(
Obj, "location",