Skip to content

Commit 4696610

Browse files
authored
Merge pull request #63797 from hborla/resolved-macro-decl-ref
2 parents 12b5aa7 + f6c3aaa commit 4696610

File tree

6 files changed

+18
-32
lines changed

6 files changed

+18
-32
lines changed

include/swift/AST/TypeCheckRequests.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3181,16 +3181,16 @@ void simple_display(llvm::raw_ostream &out,
31813181
/// Resolve a given custom attribute to an attached macro declaration.
31823182
class ResolveMacroRequest
31833183
: public SimpleRequest<ResolveMacroRequest,
3184-
MacroDecl *(UnresolvedMacroReference,
3185-
DeclContext *),
3184+
ConcreteDeclRef(UnresolvedMacroReference,
3185+
DeclContext *),
31863186
RequestFlags::Cached> {
31873187
public:
31883188
using SimpleRequest::SimpleRequest;
31893189

31903190
private:
31913191
friend SimpleRequest;
31923192

3193-
MacroDecl *
3193+
ConcreteDeclRef
31943194
evaluate(Evaluator &evaluator, UnresolvedMacroReference macroRef,
31953195
DeclContext *dc) const;
31963196

include/swift/AST/TypeCheckerTypeIDZone.def

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ SWIFT_REQUEST(TypeChecker, ResolveImplicitMemberRequest,
341341
evaluator::SideEffect(NominalTypeDecl *, ImplicitMemberAction),
342342
Uncached, NoLocationInfo)
343343
SWIFT_REQUEST(TypeChecker, ResolveMacroRequest,
344-
MacroDecl *(CustomAttr *, DeclContext *),
344+
ConcreteDeclRef(UnresolvedMacroReference, DeclContext *),
345345
Cached, NoLocationInfo)
346346
SWIFT_REQUEST(TypeChecker, ResolveTypeEraserTypeRequest,
347347
Type(ProtocolDecl *, TypeEraserAttr *),

lib/AST/Decl.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -418,10 +418,12 @@ void Decl::forEachAttachedMacro(MacroRole role,
418418
}
419419

420420
MacroDecl *Decl::getResolvedMacro(CustomAttr *customAttr) const {
421-
return evaluateOrDefault(
421+
auto declRef = evaluateOrDefault(
422422
getASTContext().evaluator,
423423
ResolveMacroRequest{customAttr, getDeclContext()},
424-
nullptr);
424+
ConcreteDeclRef());
425+
426+
return dyn_cast_or_null<MacroDecl>(declRef.getDecl());
425427
}
426428

427429
unsigned Decl::getAttachedMacroDiscriminator(

lib/AST/NameLookup.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1522,9 +1522,10 @@ populateLookupTableEntryFromMacroExpansions(ASTContext &ctx,
15221522
auto *med = dyn_cast<MacroExpansionDecl>(member);
15231523
if (!med)
15241524
continue;
1525-
auto macro = evaluateOrDefault(
1525+
auto declRef = evaluateOrDefault(
15261526
ctx.evaluator, ResolveMacroRequest{med, dc},
15271527
nullptr);
1528+
auto *macro = dyn_cast_or_null<MacroDecl>(declRef.getDecl());
15281529
if (!macro)
15291530
continue;
15301531
auto *attr = macro->getMacroRoleAttr(MacroRole::Declaration);

lib/Sema/TypeCheckDeclPrimary.cpp

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -3779,22 +3779,9 @@ ExpandMacroExpansionDeclRequest::evaluate(Evaluator &evaluator,
37793779
return {};
37803780
}
37813781
// Resolve macro candidates.
3782-
MacroDecl *macro;
3783-
if (auto *args = MED->getArgs()) {
3784-
macro = evaluateOrDefault(
3785-
ctx.evaluator, ResolveMacroRequest{MED, dc},
3786-
nullptr);
3787-
}
3788-
else {
3789-
if (foundMacros.size() > 1) {
3790-
MED->diagnose(diag::ambiguous_decl_ref, MED->getMacroName())
3791-
.highlight(MED->getMacroNameLoc().getSourceRange());
3792-
for (auto *candidate : foundMacros)
3793-
candidate->diagnose(diag::found_candidate);
3794-
return {};
3795-
}
3796-
macro = foundMacros.front();
3797-
}
3782+
auto macro = evaluateOrDefault(
3783+
ctx.evaluator, ResolveMacroRequest{MED, dc},
3784+
ConcreteDeclRef());
37983785
if (!macro)
37993786
return {};
38003787
MED->setMacroRef(macro);

lib/Sema/TypeCheckMacros.cpp

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1200,7 +1200,7 @@ swift::expandPeers(CustomAttr *attr, MacroDecl *macro, Decl *decl) {
12001200
return macroSourceFile->getBufferID();
12011201
}
12021202

1203-
MacroDecl *
1203+
ConcreteDeclRef
12041204
ResolveMacroRequest::evaluate(Evaluator &evaluator,
12051205
UnresolvedMacroReference macroRef,
12061206
DeclContext *dc) const {
@@ -1209,7 +1209,7 @@ ResolveMacroRequest::evaluate(Evaluator &evaluator,
12091209
auto foundMacros = TypeChecker::lookupMacros(
12101210
dc, macroRef.getMacroName(), SourceLoc(), roles);
12111211
if (foundMacros.empty())
1212-
return nullptr;
1212+
return ConcreteDeclRef();
12131213

12141214
// If we already have a MacroExpansionExpr, use that. Otherwise,
12151215
// create one.
@@ -1228,13 +1228,9 @@ ResolveMacroRequest::evaluate(Evaluator &evaluator,
12281228
Expr *result = macroExpansion;
12291229
TypeChecker::typeCheckExpression(result, dc);
12301230

1231-
auto macroDeclRef = macroExpansion->getMacroRef();
1232-
if (auto *macroDecl = dyn_cast_or_null<MacroDecl>(macroDeclRef.getDecl()))
1233-
return macroDecl;
1234-
12351231
// If we couldn't resolve a macro decl, the attribute is invalid.
1236-
if (auto *attr = macroRef.getAttr())
1237-
attr->setInvalid();
1232+
if (!macroExpansion->getMacroRef() && macroRef.getAttr())
1233+
macroRef.getAttr()->setInvalid();
12381234

1239-
return nullptr;
1235+
return macroExpansion->getMacroRef();
12401236
}

0 commit comments

Comments
 (0)