Skip to content

Commit 05e8140

Browse files
committedSep 16, 2024
Provide macro module name in MacroExpansionExpr creation
This properly passes the module name through from attached macros to the freestanding macro that are used under-the-hood for type checking.
1 parent 8fe0fd1 commit 05e8140

File tree

5 files changed

+20
-10
lines changed

5 files changed

+20
-10
lines changed
 

‎include/swift/AST/Expr.h

+4-2
Original file line numberDiff line numberDiff line change
@@ -6481,8 +6481,10 @@ class MacroExpansionExpr final : public Expr,
64816481
}
64826482

64836483
static MacroExpansionExpr *
6484-
create(DeclContext *dc, SourceLoc sigilLoc, DeclNameRef macroName,
6485-
DeclNameLoc macroNameLoc, SourceLoc leftAngleLoc,
6484+
create(DeclContext *dc, SourceLoc sigilLoc,
6485+
DeclNameRef moduleName, DeclNameLoc moduleNameLoc,
6486+
DeclNameRef macroName, DeclNameLoc macroNameLoc,
6487+
SourceLoc leftAngleLoc,
64866488
ArrayRef<TypeRepr *> genericArgs, SourceLoc rightAngleLoc,
64876489
ArgumentList *argList, MacroRoles roles, bool isImplicit = false,
64886490
Type ty = Type());

‎lib/AST/Expr.cpp

+6-4
Original file line numberDiff line numberDiff line change
@@ -2783,17 +2783,19 @@ TypeJoinExpr::forBranchesOfSingleValueStmtExpr(ASTContext &ctx, Type joinType,
27832783
}
27842784

27852785
MacroExpansionExpr *MacroExpansionExpr::create(
2786-
DeclContext *dc, SourceLoc sigilLoc, DeclNameRef macroName,
2787-
DeclNameLoc macroNameLoc, SourceLoc leftAngleLoc,
2786+
DeclContext *dc, SourceLoc sigilLoc,
2787+
DeclNameRef moduleName, DeclNameLoc moduleNameLoc,
2788+
DeclNameRef macroName, DeclNameLoc macroNameLoc,
2789+
SourceLoc leftAngleLoc,
27882790
ArrayRef<TypeRepr *> genericArgs, SourceLoc rightAngleLoc,
27892791
ArgumentList *argList, MacroRoles roles, bool isImplicit,
27902792
Type ty
27912793
) {
27922794
ASTContext &ctx = dc->getASTContext();
27932795
MacroExpansionInfo *info = new (ctx) MacroExpansionInfo{
27942796
sigilLoc,
2795-
/*moduleName*/ DeclNameRef(),
2796-
/*moduleNameLoc*/ DeclNameLoc(),
2797+
moduleName,
2798+
moduleNameLoc,
27972799
macroName,
27982800
macroNameLoc,
27992801
leftAngleLoc,

‎lib/Parse/ParseExpr.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -3484,7 +3484,9 @@ ParserResult<Expr> Parser::parseExprMacroExpansion(bool isExprBasic) {
34843484
return makeParserResult(
34853485
status,
34863486
MacroExpansionExpr::create(
3487-
CurDeclContext, poundLoc, macroNameRef, macroNameLoc, leftAngleLoc,
3487+
CurDeclContext, poundLoc,
3488+
/*module name=*/DeclNameRef(), /*module name loc=*/DeclNameLoc(),
3489+
macroNameRef, macroNameLoc, leftAngleLoc,
34883490
Context.AllocateCopy(genericArgs), rightAngleLoc, argList,
34893491
CurDeclContext->isTypeContext() ? MacroRole::Declaration
34903492
: getFreestandingMacroRoles()));

‎lib/Sema/CSApply.cpp

+3-1
Original file line numberDiff line numberDiff line change
@@ -3032,7 +3032,9 @@ namespace {
30323032
auto macro = cast<MacroDecl>(overload.choice.getDecl());
30333033
ConcreteDeclRef macroRef = resolveConcreteDeclRef(macro, locator);
30343034
auto *expansion = MacroExpansionExpr::create(
3035-
dc, expr->getStartLoc(), DeclNameRef(macro->getName()),
3035+
dc, expr->getStartLoc(),
3036+
/*module name=*/DeclNameRef(), /*module name loc=*/DeclNameLoc(),
3037+
DeclNameRef(macro->getName()),
30363038
DeclNameLoc(expr->getLoc()), SourceLoc(), {}, SourceLoc(), nullptr,
30373039
MacroRole::Expression, /*isImplicit=*/true, expandedType);
30383040
expansion->setMacroRef(macroRef);

‎lib/Sema/TypeCheckMacros.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -2023,8 +2023,10 @@ ConcreteDeclRef ResolveMacroRequest::evaluate(Evaluator &evaluator,
20232023
} else {
20242024
SourceRange genericArgsRange = macroRef.getGenericArgsRange();
20252025
macroExpansion = MacroExpansionExpr::create(
2026-
dc, macroRef.getSigilLoc(), macroRef.getMacroName(),
2027-
macroRef.getMacroNameLoc(), genericArgsRange.Start,
2026+
dc, macroRef.getSigilLoc(),
2027+
macroRef.getModuleName(), macroRef.getModuleNameLoc(),
2028+
macroRef.getMacroName(), macroRef.getMacroNameLoc(),
2029+
genericArgsRange.Start,
20282030
macroRef.getGenericArgs(), genericArgsRange.End,
20292031
macroRef.getArgs(), roles);
20302032
}

0 commit comments

Comments
 (0)