[Macros] Macro-metaprogram macro roles

Introduce X-macros for the various macro roles, and use them to
macro-metaprogram a lot of boilerplate involved with introducing new
macro roles.
This commit is contained in:
Doug Gregor
2023-11-13 22:37:54 -08:00
parent 3d89295736
commit b53026d8d4
13 changed files with 214 additions and 276 deletions

View File

@@ -906,14 +906,10 @@ ModuleDecl::getOriginalLocation(SourceLoc loc) const {
while (llvm::Optional<GeneratedSourceInfo> info =
SM.getGeneratedSourceInfo(bufferID)) {
switch (info->kind) {
case GeneratedSourceInfo::ExpressionMacroExpansion:
case GeneratedSourceInfo::FreestandingDeclMacroExpansion:
case GeneratedSourceInfo::AccessorMacroExpansion:
case GeneratedSourceInfo::MemberAttributeMacroExpansion:
case GeneratedSourceInfo::MemberMacroExpansion:
case GeneratedSourceInfo::PeerMacroExpansion:
case GeneratedSourceInfo::ConformanceMacroExpansion:
case GeneratedSourceInfo::ExtensionMacroExpansion: {
#define MACRO_ROLE(Name, Description) \
case GeneratedSourceInfo::Name##MacroExpansion:
#include "swift/Basic/MacroRoles.def"
{
// Location was within a macro expansion, return the expansion site, not
// the insertion location.
if (info->attachedMacroCustomAttr) {
@@ -1202,29 +1198,10 @@ llvm::Optional<MacroRole> SourceFile::getFulfilledMacroRole() const {
auto genInfo =
*getASTContext().SourceMgr.getGeneratedSourceInfo(*getBufferID());
switch (genInfo.kind) {
case GeneratedSourceInfo::ExpressionMacroExpansion:
return MacroRole::Expression;
case GeneratedSourceInfo::FreestandingDeclMacroExpansion:
return MacroRole::Declaration;
case GeneratedSourceInfo::AccessorMacroExpansion:
return MacroRole::Accessor;
case GeneratedSourceInfo::MemberAttributeMacroExpansion:
return MacroRole::MemberAttribute;
case GeneratedSourceInfo::MemberMacroExpansion:
return MacroRole::Member;
case GeneratedSourceInfo::PeerMacroExpansion:
return MacroRole::Peer;
case GeneratedSourceInfo::ConformanceMacroExpansion:
return MacroRole::Conformance;
case GeneratedSourceInfo::ExtensionMacroExpansion:
return MacroRole::Extension;
#define MACRO_ROLE(Name, Description) \
case GeneratedSourceInfo::Name##MacroExpansion: \
return MacroRole::Name;
#include "swift/Basic/MacroRoles.def"
case GeneratedSourceInfo::ReplacedFunctionBody:
case GeneratedSourceInfo::PrettyPrinted: