Skip to content

Commit 2f41499

Browse files
committed
[Name lookup] Make sure to update macro-expanded list when an extension is added
1 parent 54d2ea0 commit 2f41499

File tree

1 file changed

+15
-10
lines changed

1 file changed

+15
-10
lines changed

lib/AST/NameLookup.cpp

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1272,24 +1272,27 @@ class swift::MemberLookupTable : public ASTAllocated<swift::MemberLookupTable> {
12721272
if (LazyMacroExpansionState.ComputedContainersWithMacroExpansions)
12731273
return LazyMacroExpansionState.ContainersWithMacroExpansions;
12741274

1275-
Evaluator &evaluator = nominal->getASTContext().evaluator;
1275+
LazyMacroExpansionState.ComputedContainersWithMacroExpansions = true;
12761276

12771277
// Does the type have macro expansions?
1278-
if (evaluateOrDefault(
1279-
evaluator, PotentialMacroExpansionsInContextRequest{nominal}, {}))
1280-
LazyMacroExpansionState.ContainersWithMacroExpansions.push_back(nominal);
1278+
addContainerWithMacroExpansions(nominal);
12811279

12821280
// Check each extension for macro expansions.
1283-
for (auto ext : nominal->getExtensions()) {
1284-
if (evaluateOrDefault(
1285-
evaluator, PotentialMacroExpansionsInContextRequest{ext}, {}))
1286-
LazyMacroExpansionState.ContainersWithMacroExpansions.push_back(ext);
1287-
}
1281+
for (auto ext : nominal->getExtensions())
1282+
addContainerWithMacroExpansions(ext);
12881283

1289-
LazyMacroExpansionState.ComputedContainersWithMacroExpansions = true;
12901284
return LazyMacroExpansionState.ContainersWithMacroExpansions;
12911285
}
12921286

1287+
void addContainerWithMacroExpansions(TypeOrExtensionDecl container){
1288+
if (LazyMacroExpansionState.ComputedContainersWithMacroExpansions &&
1289+
evaluateOrDefault(
1290+
container.getAsDecl()->getASTContext().evaluator,
1291+
PotentialMacroExpansionsInContextRequest{container}, {}))
1292+
LazyMacroExpansionState.ContainersWithMacroExpansions.push_back(
1293+
container);
1294+
}
1295+
12931296
/// Determine whether the given container has any macro-introduced names that
12941297
/// match the given declaration.
12951298
bool hasAnyMacroNamesMatching(TypeOrExtensionDecl container, DeclName name);
@@ -1439,6 +1442,8 @@ void NominalTypeDecl::addedExtension(ExtensionDecl *ext) {
14391442
} else {
14401443
table->addMembers(ext->getMembers());
14411444
}
1445+
1446+
table->addContainerWithMacroExpansions(ext);
14421447
}
14431448

14441449
void NominalTypeDecl::addedMember(Decl *member) {

0 commit comments

Comments
 (0)