@@ -178,8 +178,9 @@ class UnqualifiedLookupFactory {
178
178
void dump () const ;
179
179
};
180
180
181
+ enum class AddGenericParameters { Yes, No };
181
182
struct PerContextInfo {
182
- DeclContext *thisContext; // TODO: Eliminate ME
183
+ AddGenericParameters addGenericParameters;
183
184
DeclContext *lookupContextForThisContext;
184
185
Optional<PlacesToSearch> placesToSearch;
185
186
Optional<bool > isCascadingUse;
@@ -676,7 +677,7 @@ void UnqualifiedLookupFactory::finishLookingInContext(
676
677
auto placesToSearch = std::move (info.placesToSearch );
677
678
auto isCascadingUse = info.isCascadingUse ;
678
679
679
- if (!isa<DefaultArgumentInitializer>( info.thisContext ) &&
680
+ if (info.addGenericParameters == AddGenericParameters::Yes &&
680
681
addGenericParametersHereAndInEnclosingScopes (lookupContextForThisContext))
681
682
return ;
682
683
if (placesToSearch.hasValue () && !placesToSearch.getValue ().empty ()) {
@@ -689,12 +690,10 @@ void UnqualifiedLookupFactory::finishLookingInContext(
689
690
}
690
691
auto *const whereToLookNext =
691
692
lookupContextForThisContext->getParentForLookup ();
692
- assert (whereToLookNext != info.thisContext && " non-termination" );
693
693
694
694
lookupNameInDeclContexts (
695
695
DCAndUnresolvedIsCascadingUse{whereToLookNext, isCascadingUse});
696
696
}
697
- // clang-format on
698
697
699
698
void UnqualifiedLookupFactory::lookupLocalsInAppropriateContext (
700
699
const DCAndUnresolvedIsCascadingUse dcAndIsCasc) {
@@ -730,7 +729,7 @@ void UnqualifiedLookupFactory::lookupLocalsInPatternBindingInitializer(
730
729
DeclContext *const parent = PBI->getParent ();
731
730
// clang-format off
732
731
finishLookingInContext ( PerContextInfo{
733
- PBI ,
732
+ AddGenericParameters::Yes ,
734
733
parent,
735
734
PlacesToSearch (PBI, parent, parent),
736
735
resolveIsCascadingUse (PBI, isCascadingUse,
@@ -744,7 +743,7 @@ void UnqualifiedLookupFactory::lookupLocalsInPatternBindingInitializer(
744
743
DeclContext *const surroundingContext = PBI->getParent ();
745
744
// clang-format off
746
745
finishLookingInContext ( PerContextInfo{
747
- PBI ,
746
+ AddGenericParameters::Yes ,
748
747
surroundingContext,
749
748
PlacesToSearch (surroundingContext,
750
749
surroundingContext, surroundingContext),
@@ -759,7 +758,7 @@ void UnqualifiedLookupFactory::lookupLocalsInPatternBindingInitializer(
759
758
// context.
760
759
// clang-format off
761
760
finishLookingInContext ( PerContextInfo{
762
- PBI ,
761
+ AddGenericParameters::Yes ,
763
762
PBI,
764
763
None,
765
764
resolveIsCascadingUse (PBI, isCascadingUse,
@@ -806,7 +805,7 @@ void UnqualifiedLookupFactory::lookupLocalsInFunctionDecl(
806
805
if (!AFD->getDeclContext ()->isTypeContext ()) {
807
806
// clang-format off
808
807
finishLookingInContext ( PerContextInfo{
809
- AFD ,
808
+ AddGenericParameters::Yes ,
810
809
AFD,
811
810
None,
812
811
returnValueForIsCascadingUse});
@@ -822,7 +821,7 @@ void UnqualifiedLookupFactory::lookupLocalsInFunctionDecl(
822
821
DeclContext *const BaseDC = isOutsideBodyOfFunction (AFD) ? fnDeclContext : AFD;
823
822
// clang-format off
824
823
finishLookingInContext ( PerContextInfo{
825
- AFD ,
824
+ AddGenericParameters::Yes ,
826
825
AFD->getParent (),
827
826
PlacesToSearch (BaseDC,
828
827
fnDeclContext,
@@ -852,7 +851,7 @@ void UnqualifiedLookupFactory::lookupLocalsInClosure(
852
851
}
853
852
// clang-format off
854
853
finishLookingInContext ( PerContextInfo{
855
- ACE ,
854
+ AddGenericParameters::Yes ,
856
855
ACE,
857
856
None,
858
857
resolveIsCascadingUse (ACE, isCascadingUse,
@@ -865,7 +864,7 @@ void UnqualifiedLookupFactory::lookupLocalsInNominalTypeOrExtension(
865
864
NominalTypeDeclOrExtensionDecl *D, Optional<bool > isCascadingUse) {
866
865
// clang-format off
867
866
finishLookingInContext ( PerContextInfo{
868
- D ,
867
+ AddGenericParameters::Yes ,
869
868
D,
870
869
shouldLookupMembers (D, Loc)
871
870
? Optional<PlacesToSearch>(PlacesToSearch (D, D, D))
@@ -880,7 +879,8 @@ void UnqualifiedLookupFactory::lookupLocalsInDefaultArgumentInitializer(
880
879
DefaultArgumentInitializer *I, Optional<bool > isCascadingUse) {
881
880
// In a default argument, skip immediately out of both the
882
881
// initializer and the function.
883
- finishLookingInContext (PerContextInfo{I, I->getParent (), None, false });
882
+ finishLookingInContext (
883
+ PerContextInfo{AddGenericParameters::No, I->getParent (), None, false });
884
884
}
885
885
886
886
void UnqualifiedLookupFactory::lookupLocalsInMiscContext (
@@ -891,7 +891,7 @@ void UnqualifiedLookupFactory::lookupLocalsInMiscContext(
891
891
isa<TypeAliasDecl>(dc) ||
892
892
isa<SubscriptDecl>(dc));
893
893
finishLookingInContext ( PerContextInfo{
894
- dc ,
894
+ AddGenericParameters::Yes ,
895
895
dc,
896
896
None,
897
897
resolveIsCascadingUse (DC, isCascadingUse,
@@ -1723,6 +1723,8 @@ void UnqualifiedLookupFactory::dumpBreadcrumbs() const {
1723
1723
1724
1724
void UnqualifiedLookupFactory::PerContextInfo::dump () const {
1725
1725
auto &e = llvm::errs ();
1726
+ e << (addGenericParameters == AddGenericParameters::Yes ? " add generics, "
1727
+ : " " );
1726
1728
e << " dc: " ;
1727
1729
lookupContextForThisContext->dumpContext ();
1728
1730
if (placesToSearch.hasValue ())
0 commit comments