@@ -1258,36 +1258,34 @@ ResolveMacroRequest::evaluate(Evaluator &evaluator,
12581258 return nullptr ;
12591259
12601260 // Extract macro arguments, or create an empty list.
1261- auto *args = macroRef.getArgs ();
1262- if (!args)
1263- args = ArgumentList::createImplicit (ctx, {});
1264-
1265- // Form an `OverloadedDeclRefExpr` with the filtered lookup result above
1266- // to ensure @freestanding macros are not considered in overload resolution.
1267- FunctionRefKind functionRefKind = FunctionRefKind::SingleApply;
1268- SmallVector<ValueDecl *> valueDecls;
1269- for (auto *macro : foundMacros)
1270- valueDecls.push_back (macro);
1271- Expr *callee = new (ctx) OverloadedDeclRefExpr (
1272- valueDecls, macroRef.getMacroNameLoc (), functionRefKind,
1273- /* implicit*/ true );
1274- auto genArgs = macroRef.getGenericArgs ();
1275- if (!genArgs.empty ()) {
1276- auto genArgsRange = macroRef.getGenericArgsRange ();
1277- callee = UnresolvedSpecializeExpr::create (
1278- ctx, callee, genArgsRange.Start , genArgs, genArgsRange.End );
1261+ auto *argList = macroRef.getArgs ();
1262+ if (!argList)
1263+ argList = ArgumentList::createImplicit (ctx, {});
1264+
1265+ // If we already have a MacroExpansionExpr, use that. Otherwise,
1266+ // create one.
1267+ MacroExpansionExpr *macroExpansion;
1268+ if (auto *expr = macroRef.getExpr ()) {
1269+ macroExpansion = expr;
1270+ } else {
1271+ SourceRange genericArgsRange = macroRef.getGenericArgsRange ();
1272+ macroExpansion = new (ctx) MacroExpansionExpr (
1273+ dc, macroRef.getSigilLoc (), macroRef.getMacroName (),
1274+ macroRef.getMacroNameLoc (), genericArgsRange.Start ,
1275+ macroRef.getGenericArgs (), genericArgsRange.End ,
1276+ argList, roles);
12791277 }
1280- auto *call = CallExpr::createImplicit (ctx, callee, args);
12811278
1282- Expr *result = call ;
1279+ Expr *result = macroExpansion ;
12831280 TypeChecker::typeCheckExpression (result, dc);
12841281
1285- if ( auto *fn = dyn_cast<DeclRefExpr>(call-> getFn ()))
1286- if (auto *macro = dyn_cast <MacroDecl>(fn-> getDecl ()))
1287- return macro ;
1282+ auto macroDeclRef = macroExpansion-> getMacroRef ();
1283+ if (auto *macroDecl = dyn_cast_or_null <MacroDecl>(macroDeclRef. getDecl ()))
1284+ return macroDecl ;
12881285
12891286 // If we couldn't resolve a macro decl, the attribute is invalid.
12901287 if (auto *attr = macroRef.getAttr ())
12911288 attr->setInvalid ();
1289+
12921290 return nullptr ;
12931291}
0 commit comments