@@ -383,13 +383,14 @@ DeclAttributes Decl::getSemanticAttrs() const {
383383void Decl::visitAuxiliaryDecls (AuxiliaryDeclCallback callback) const {
384384 auto &ctx = getASTContext ();
385385 auto *mutableThis = const_cast <Decl *>(this );
386+ SourceManager &sourceMgr = ctx.SourceMgr ;
387+ auto *moduleDecl = getModuleContext ();
388+
386389 auto peerBuffers =
387390 evaluateOrDefault (ctx.evaluator ,
388391 ExpandPeerMacroRequest{mutableThis},
389392 {});
390393
391- SourceManager &sourceMgr = ctx.SourceMgr ;
392- auto *moduleDecl = getModuleContext ();
393394 for (auto bufferID : peerBuffers) {
394395 auto startLoc = sourceMgr.getLocForBufferStart (bufferID);
395396 auto *sourceFile = moduleDecl->getSourceFileContainingLocation (startLoc);
@@ -398,6 +399,20 @@ void Decl::visitAuxiliaryDecls(AuxiliaryDeclCallback callback) const {
398399 }
399400 }
400401
402+ if (auto *nominal = dyn_cast<NominalTypeDecl>(mutableThis)) {
403+ auto conformanceBuffers =
404+ evaluateOrDefault (ctx.evaluator ,
405+ ExpandConformanceMacros{nominal},
406+ {});
407+ for (auto bufferID : conformanceBuffers) {
408+ auto startLoc = sourceMgr.getLocForBufferStart (bufferID);
409+ auto *sourceFile = moduleDecl->getSourceFileContainingLocation (startLoc);
410+ for (auto *extension : sourceFile->getTopLevelDecls ()) {
411+ callback (extension);
412+ }
413+ }
414+ }
415+
401416 // FIXME: fold VarDecl::visitAuxiliaryDecls into this.
402417}
403418
@@ -9810,6 +9825,9 @@ StringRef swift::getMacroRoleString(MacroRole role) {
98109825
98119826 case MacroRole::Peer:
98129827 return " peer" ;
9828+
9829+ case MacroRole::Conformance:
9830+ return " conformance" ;
98139831 }
98149832}
98159833
@@ -9856,7 +9874,8 @@ static MacroRoles attachedMacroRoles = (MacroRoles() |
98569874 MacroRole::Accessor |
98579875 MacroRole::MemberAttribute |
98589876 MacroRole::Member |
9859- MacroRole::Peer);
9877+ MacroRole::Peer |
9878+ MacroRole::Conformance);
98609879
98619880bool swift::isFreestandingMacro (MacroRoles contexts) {
98629881 return bool (contexts & freestandingMacroRoles);
@@ -10035,6 +10054,7 @@ MacroDiscriminatorContext MacroDiscriminatorContext::getParentOf(
1003510054 case GeneratedSourceInfo::MemberAttributeMacroExpansion:
1003610055 case GeneratedSourceInfo::MemberMacroExpansion:
1003710056 case GeneratedSourceInfo::PeerMacroExpansion:
10057+ case GeneratedSourceInfo::ConformanceMacroExpansion:
1003810058 case GeneratedSourceInfo::PrettyPrinted:
1003910059 case GeneratedSourceInfo::ReplacedFunctionBody:
1004010060 return origDC;
0 commit comments