Skip to content

Commit 3fef8a8

Browse files
authored
Merge pull request swiftlang#63675 from hborla/macro-re-typechecking
[Macros] Remove the `MacroRoles` argument to `ResolveMacroRequest`.
2 parents e3b0259 + c33c925 commit 3fef8a8

13 files changed

+54
-14
lines changed

include/swift/AST/TypeCheckRequests.h

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3162,6 +3162,9 @@ class UnresolvedMacroReference {
31623162
ArrayRef<TypeRepr *> getGenericArgs() const;
31633163
ArgumentList *getArgs() const;
31643164

3165+
/// Returns the macro roles corresponding to this macro reference.
3166+
MacroRoles getMacroRoles() const;
3167+
31653168
friend bool operator==(const UnresolvedMacroReference &lhs,
31663169
const UnresolvedMacroReference &rhs) {
31673170
return lhs.getOpaqueValue() == rhs.getOpaqueValue();
@@ -3178,7 +3181,7 @@ void simple_display(llvm::raw_ostream &out,
31783181
/// Resolve a given custom attribute to an attached macro declaration.
31793182
class ResolveMacroRequest
31803183
: public SimpleRequest<ResolveMacroRequest,
3181-
MacroDecl *(UnresolvedMacroReference, MacroRoles,
3184+
MacroDecl *(UnresolvedMacroReference,
31823185
DeclContext *),
31833186
RequestFlags::Cached> {
31843187
public:
@@ -3189,7 +3192,7 @@ class ResolveMacroRequest
31893192

31903193
MacroDecl *
31913194
evaluate(Evaluator &evaluator, UnresolvedMacroReference macroRef,
3192-
MacroRoles roles, DeclContext *dc) const;
3195+
DeclContext *dc) const;
31933196

31943197
public:
31953198
bool isCached() const { return true; }

lib/AST/ASTMangler.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3804,7 +3804,7 @@ void ASTMangler::appendMacroExpansionContext(
38043804
auto *macroDecl = evaluateOrDefault(
38053805
ctx.evaluator,
38063806
ResolveMacroRequest{const_cast<CustomAttr *>(attr),
3807-
getAttachedMacroRoles(), outerExpansionDC},
3807+
outerExpansionDC},
38083808
nullptr);
38093809
if (macroDecl)
38103810
baseName = macroDecl->getBaseName();
@@ -3898,7 +3898,7 @@ std::string ASTMangler::mangleAttachedMacroExpansion(
38983898
StringRef macroName;
38993899
auto *macroDecl = evaluateOrDefault(
39003900
decl->getASTContext().evaluator,
3901-
ResolveMacroRequest{attr, role, macroDeclContext},
3901+
ResolveMacroRequest{attr, macroDeclContext},
39023902
nullptr);
39033903
if (macroDecl)
39043904
macroName = macroDecl->getName().getBaseName().userFacingName();

lib/AST/Attr.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2382,8 +2382,7 @@ bool CustomAttr::isAttachedMacro(const Decl *decl) const {
23822382

23832383
auto *macroDecl = evaluateOrDefault(
23842384
ctx.evaluator,
2385-
ResolveMacroRequest{const_cast<CustomAttr *>(this),
2386-
getAttachedMacroRoles(), dc},
2385+
ResolveMacroRequest{const_cast<CustomAttr *>(this), dc},
23872386
nullptr);
23882387

23892388
return macroDecl != nullptr;

lib/AST/Decl.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -406,7 +406,7 @@ void Decl::forEachAttachedMacro(MacroRole role,
406406
auto customAttr = const_cast<CustomAttr *>(customAttrConst);
407407
auto *macroDecl = evaluateOrDefault(
408408
ctx.evaluator,
409-
ResolveMacroRequest{customAttr, getAttachedMacroRoles(), dc},
409+
ResolveMacroRequest{customAttr, dc},
410410
nullptr);
411411

412412
if (!macroDecl)

lib/AST/NameLookup.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1523,7 +1523,7 @@ populateLookupTableEntryFromMacroExpansions(ASTContext &ctx,
15231523
if (!med)
15241524
continue;
15251525
auto macro = evaluateOrDefault(
1526-
ctx.evaluator, ResolveMacroRequest{med, MacroRole::Declaration, dc},
1526+
ctx.evaluator, ResolveMacroRequest{med, dc},
15271527
nullptr);
15281528
if (!macro)
15291529
continue;

lib/AST/TypeCheckRequests.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1742,6 +1742,19 @@ ArgumentList *UnresolvedMacroReference::getArgs() const {
17421742
llvm_unreachable("Unhandled case");
17431743
}
17441744

1745+
MacroRoles UnresolvedMacroReference::getMacroRoles() const {
1746+
if (pointer.is<MacroExpansionExpr *>())
1747+
return MacroRole::Expression;
1748+
1749+
if (pointer.is<MacroExpansionDecl *>())
1750+
return getFreestandingMacroRoles();
1751+
1752+
if (pointer.is<CustomAttr *>())
1753+
return getAttachedMacroRoles();
1754+
1755+
llvm_unreachable("Unsupported macro reference");
1756+
}
1757+
17451758
void swift::simple_display(llvm::raw_ostream &out,
17461759
const UnresolvedMacroReference &ref) {
17471760
if (ref.getDecl())

lib/IDE/SourceEntityWalker.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -698,7 +698,6 @@ bool SemaAnnotator::handleCustomAttributes(Decl *D) {
698698
// If this attribute resolves to a macro, index that.
699699
ASTContext &ctx = D->getASTContext();
700700
ResolveMacroRequest req{const_cast<CustomAttr *>(customAttr),
701-
getAttachedMacroRoles(),
702701
D->getInnermostDeclContext()};
703702
if (auto macroDecl = evaluateOrDefault(ctx.evaluator, req, nullptr)) {
704703
Type macroRefType = macroDecl->getDeclaredInterfaceType();

lib/Sema/CSApply.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5365,7 +5365,12 @@ namespace {
53655365
ConcreteDeclRef macroRef = resolveConcreteDeclRef(macro, locator);
53665366
E->setMacroRef(macroRef);
53675367

5368-
if (E->getMacroRoles().contains(MacroRole::Expression) &&
5368+
// For now, only expand macro expansion expressions that fulfill
5369+
// `MacroRole::Expression` exactly. Freestanding code item macros
5370+
// have a `getMacroRoles()` value equal to `getFreestandingMacroRoles()`,
5371+
// which includes expression macros, and they are expanded in a separate
5372+
// request.
5373+
if (E->getMacroRoles() == MacroRole::Expression &&
53695374
!cs.Options.contains(ConstraintSystemFlags::DisableMacroExpansions)) {
53705375
if (auto newExpr = expandMacroExpr(dc, E, macroRef, expandedType)) {
53715376
E->setRewritten(newExpr);

lib/Sema/TypeCheckAttr.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3568,7 +3568,7 @@ void AttributeChecker::visitCustomAttr(CustomAttr *attr) {
35683568
if (!nominal) {
35693569
// Try resolving an attached macro attribute.
35703570
auto *macro = evaluateOrDefault(
3571-
Ctx.evaluator, ResolveMacroRequest{attr, getAttachedMacroRoles(), dc},
3571+
Ctx.evaluator, ResolveMacroRequest{attr, dc},
35723572
nullptr);
35733573
if (macro || !attr->isValid())
35743574
return;

lib/Sema/TypeCheckDeclPrimary.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3782,7 +3782,7 @@ ExpandMacroExpansionDeclRequest::evaluate(Evaluator &evaluator,
37823782
MacroDecl *macro;
37833783
if (auto *args = MED->getArgs()) {
37843784
macro = evaluateOrDefault(
3785-
ctx.evaluator, ResolveMacroRequest{MED, MacroRole::Declaration, dc},
3785+
ctx.evaluator, ResolveMacroRequest{MED, dc},
37863786
nullptr);
37873787
}
37883788
else {

0 commit comments

Comments
 (0)