From 529a0570f7e8c5144bd3ad057e43f00e3af58d1b Mon Sep 17 00:00:00 2001 From: Daniel Grumberg Date: Tue, 29 Mar 2022 17:48:11 +0100 Subject: [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. --- .../ExtractAPI/Serialization/SymbolGraphSerializer.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'clang/lib/ExtractAPI/Serialization/SymbolGraphSerializer.cpp') 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); -- cgit v1.1