diff options
author | Zixu Wang <zixu_wang@apple.com> | 2022-03-25 11:43:44 -0700 |
---|---|---|
committer | Zixu Wang <zixu_wang@apple.com> | 2022-03-29 10:06:08 -0700 |
commit | 15bf0e567375c977cf7d7b48465eb1561e890b54 (patch) | |
tree | 15278bfbd9173bd90a16b3c6723412ce7613d55b /clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp | |
parent | ef6f7c4a60836b052a0c6d995280d19eafa31b39 (diff) | |
download | llvm-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.cpp | 24 |
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", |