@@ -3873,80 +3873,54 @@ void ASTMangler::appendMacroExpansionContext(
38733873 DeclContext *outerExpansionDC;
38743874 DeclBaseName baseName;
38753875 unsigned discriminator;
3876+
3877+ // Determine the macro role.
38763878 MacroRole role;
38773879 switch (generatedSourceInfo->kind ) {
3878- case GeneratedSourceInfo::ExpressionMacroExpansion: {
3880+ #define MACRO_ROLE (Name, Description ) \
3881+ case GeneratedSourceInfo::Name##MacroExpansion: \
3882+ role = MacroRole::Name; \
3883+ break ;
3884+ #include " swift/Basic/MacroRoles.def"
3885+
3886+ case GeneratedSourceInfo::PrettyPrinted:
3887+ case GeneratedSourceInfo::ReplacedFunctionBody:
3888+ return appendContext (origDC, StringRef ());
3889+ }
3890+
3891+ switch (generatedSourceInfo->kind ) {
3892+ // Freestanding macros
3893+ #define FREESTANDING_MACRO_ROLE (Name, Description ) \
3894+ case GeneratedSourceInfo::Name##MacroExpansion:
3895+ #define ATTACHED_MACRO_ROLE (Name, Description )
3896+ #include " swift/Basic/MacroRoles.def"
3897+ {
38793898 auto parent = ASTNode::getFromOpaqueValue (generatedSourceInfo->astNode );
38803899 if (auto expr =
38813900 cast_or_null<MacroExpansionExpr>(parent.dyn_cast <Expr *>())) {
38823901 outerExpansionLoc = expr->getLoc ();
38833902 baseName = expr->getMacroName ().getBaseName ();
38843903 discriminator = expr->getDiscriminator ();
3885- role = MacroRole::Expression;
38863904 outerExpansionDC = expr->getDeclContext ();
38873905 } else {
38883906 auto decl = cast<MacroExpansionDecl>(parent.get <Decl *>());
38893907 outerExpansionLoc = decl->getLoc ();
38903908 baseName = decl->getMacroName ().getBaseName ();
38913909 discriminator = decl->getDiscriminator ();
3892- role = MacroRole::Declaration;
38933910 outerExpansionDC = decl->getDeclContext ();
38943911 }
38953912 break ;
38963913 }
38973914
3898- case GeneratedSourceInfo::FreestandingDeclMacroExpansion: {
3899- auto expansion =
3900- cast<MacroExpansionDecl>(
3901- ASTNode::getFromOpaqueValue (generatedSourceInfo->astNode )
3902- .get <Decl *>());
3903- outerExpansionLoc = expansion->getLoc ();
3904- outerExpansionDC = expansion->getDeclContext ();
3905- discriminator = expansion->getDiscriminator ();
3906- role = MacroRole::Declaration;
3907- baseName = expansion->getMacroName ().getBaseName ();
3908- break ;
3909- }
3910-
3911- case GeneratedSourceInfo::AccessorMacroExpansion:
3912- case GeneratedSourceInfo::MemberAttributeMacroExpansion:
3913- case GeneratedSourceInfo::MemberMacroExpansion:
3914- case GeneratedSourceInfo::PeerMacroExpansion:
3915- case GeneratedSourceInfo::ConformanceMacroExpansion:
3916- case GeneratedSourceInfo::ExtensionMacroExpansion: {
3915+ // Attached macros
3916+ #define FREESTANDING_MACRO_ROLE (Name, Description )
3917+ #define ATTACHED_MACRO_ROLE (Name, Description ) \
3918+ case GeneratedSourceInfo::Name##MacroExpansion:
3919+ #include " swift/Basic/MacroRoles.def"
3920+ {
39173921 auto decl = ASTNode::getFromOpaqueValue (generatedSourceInfo->astNode )
39183922 .get <Decl *>();
39193923 auto attr = generatedSourceInfo->attachedMacroCustomAttr ;
3920-
3921- switch (generatedSourceInfo->kind ) {
3922- case GeneratedSourceInfo::AccessorMacroExpansion:
3923- role = MacroRole::Accessor;
3924- break ;
3925-
3926- case GeneratedSourceInfo::MemberAttributeMacroExpansion:
3927- role = MacroRole::MemberAttribute;
3928- break ;
3929-
3930- case GeneratedSourceInfo::MemberMacroExpansion:
3931- role = MacroRole::Member;
3932- break ;
3933-
3934- case GeneratedSourceInfo::PeerMacroExpansion:
3935- role = MacroRole::Peer;
3936- break ;
3937-
3938- case GeneratedSourceInfo::ConformanceMacroExpansion:
3939- role = MacroRole::Conformance;
3940- break ;
3941-
3942- case GeneratedSourceInfo::ExtensionMacroExpansion:
3943- role = MacroRole::Extension;
3944- break ;
3945-
3946- default :
3947- llvm_unreachable (" Unhandled macro role" );
3948- }
3949-
39503924 outerExpansionLoc = decl->getLoc ();
39513925 outerExpansionDC = decl->getDeclContext ();
39523926
@@ -3956,13 +3930,12 @@ void ASTMangler::appendMacroExpansionContext(
39563930 baseName = ctx.getIdentifier (" __unknown_macro__" );
39573931
39583932 discriminator = decl->getAttachedMacroDiscriminator (baseName, role, attr);
3959-
39603933 break ;
39613934 }
39623935
39633936 case GeneratedSourceInfo::PrettyPrinted:
39643937 case GeneratedSourceInfo::ReplacedFunctionBody:
3965- return appendContext (origDC, StringRef () );
3938+ llvm_unreachable ( " Exited above " );
39663939 }
39673940
39683941 // If we hit the point where the structure is represented as a DeclContext,
@@ -3982,9 +3955,9 @@ void ASTMangler::appendMacroExpansionOperator(
39823955 appendIdentifier (macroName);
39833956
39843957 switch (role) {
3985- case MacroRole::Expression :
3986- case MacroRole::Declaration:
3987- case MacroRole::CodeItem:
3958+ # define FREESTANDING_MACRO_ROLE ( Name, Description ) case MacroRole::Name :
3959+ # define ATTACHED_MACRO_ROLE ( Name, Description )
3960+ # include " swift/Basic/MacroRoles.def "
39883961 appendOperator (" fMf" , Index (discriminator));
39893962 break ;
39903963
0 commit comments