aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
diff options
context:
space:
mode:
authorDaniel Grumberg <dgrumberg@apple.com>2022-03-29 17:48:11 +0100
committerDaniel Grumberg <dgrumberg@apple.com>2022-03-30 18:33:10 +0100
commit529a0570f7e8c5144bd3ad057e43f00e3af58d1b (patch)
tree113bbcd01f2df35cd3e16fdac2f0ae187efad3aa /clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
parenta9909d23e9bb8c4649cba1c14d479c28df4ca185 (diff)
downloadllvm-529a0570f7e8c5144bd3ad057e43f00e3af58d1b.zip
llvm-529a0570f7e8c5144bd3ad057e43f00e3af58d1b.tar.gz
llvm-529a0570f7e8c5144bd3ad057e43f00e3af58d1b.tar.bz2
[clang][extract-api] Add support for macros
To achieve this we hook into the preprocessor during the ExtractAPIAction and record definitions for macros that don't get undefined during preprocessing.
Diffstat (limited to 'clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp')
-rw-r--r--clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
index 1acb67a..bfd2c20 100644
--- a/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
+++ b/clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp
@@ -397,6 +397,9 @@ Object serializeSymbolKind(const APIRecord &Record, Language Lang) {
Kind["identifier"] = AddLangPrefix("protocol");
Kind["displayName"] = "Protocol";
break;
+ case APIRecord::RK_MacroDefinition:
+ Kind["identifier"] = AddLangPrefix("macro");
+ Kind["displayName"] = "Macro";
}
return Kind;
@@ -576,6 +579,15 @@ void SymbolGraphSerializer::serializeObjCContainerRecord(
ObjCInterface->SuperClass);
}
+void SymbolGraphSerializer::serializeMacroDefinitionRecord(
+ const MacroDefinitionRecord &Record) {
+ auto Macro = serializeAPIRecord(Record);
+ if (!Macro)
+ return;
+
+ Symbols.emplace_back(std::move(*Macro));
+}
+
Object SymbolGraphSerializer::serialize() {
Object Root;
serializeObject(Root, "metadata", serializeMetadata());
@@ -601,6 +613,9 @@ Object SymbolGraphSerializer::serialize() {
for (const auto &ObjCProtocol : API.getObjCProtocols())
serializeObjCContainerRecord(*ObjCProtocol.second);
+ for (const auto &Macro : API.getMacros())
+ serializeMacroDefinitionRecord(*Macro.second);
+
Root["symbols"] = std::move(Symbols);
Root["relationhips"] = std::move(Relationships);