@@ -71,7 +71,6 @@ namespace {
71
71
// / Builder that helps construct a lookup result from the raw lookup
72
72
// / data.
73
73
class LookupResultBuilder {
74
- TypeChecker &TC;
75
74
LookupResult &Result;
76
75
DeclContext *DC;
77
76
NameLookupOptions Options;
@@ -86,12 +85,12 @@ namespace {
86
85
llvm::SmallDenseMap<std::pair<ValueDecl *, DeclContext *>, bool , 4 > Known;
87
86
88
87
public:
89
- LookupResultBuilder (TypeChecker &tc, LookupResult &result, DeclContext *dc,
88
+ LookupResultBuilder (LookupResult &result, DeclContext *dc,
90
89
NameLookupOptions options,
91
90
bool isMemberLookup)
92
- : TC(tc), Result(result), DC(dc), Options(options),
91
+ : Result(result), DC(dc), Options(options),
93
92
IsMemberLookup (isMemberLookup) {
94
- if (!TC. Context .LangOpts .EnableAccessControl )
93
+ if (!dc-> getASTContext () .LangOpts .EnableAccessControl )
95
94
Options |= NameLookupFlags::IgnoreAccessControl;
96
95
}
97
96
@@ -132,8 +131,8 @@ namespace {
132
131
removeOverriddenDecls (FoundOuterDecls);
133
132
134
133
// Remove any shadowed declarations from the found-declarations set.
135
- removeShadowedDecls (FoundDecls, DC->getParentModule (), &TC );
136
- removeShadowedDecls (FoundOuterDecls, DC->getParentModule (), &TC );
134
+ removeShadowedDecls (FoundDecls, DC->getParentModule ());
135
+ removeShadowedDecls (FoundOuterDecls, DC->getParentModule ());
137
136
138
137
// Filter out those results that have been removed from the
139
138
// found-declarations set.
@@ -232,7 +231,10 @@ namespace {
232
231
233
232
// Dig out the protocol conformance.
234
233
auto *foundProto = cast<ProtocolDecl>(foundDC);
235
- auto conformance = TC.conformsToProtocol (conformingType, foundProto, DC,
234
+ auto resolver = DC->getASTContext ().getLazyResolver ();
235
+ assert (resolver && " Need an active resolver" );
236
+ auto &tc = *static_cast <TypeChecker *>(resolver);
237
+ auto conformance = tc.conformsToProtocol (conformingType, foundProto, DC,
236
238
conformanceOptions);
237
239
if (!conformance) {
238
240
// If there's no conformance, we have an existential
@@ -254,10 +256,10 @@ namespace {
254
256
ValueDecl *witness = nullptr ;
255
257
auto concrete = conformance->getConcrete ();
256
258
if (auto assocType = dyn_cast<AssociatedTypeDecl>(found)) {
257
- witness = concrete->getTypeWitnessAndDecl (assocType, &TC )
259
+ witness = concrete->getTypeWitnessAndDecl (assocType, nullptr )
258
260
.second ;
259
261
} else if (found->isProtocolRequirement ()) {
260
- witness = concrete->getWitnessDecl (found, &TC );
262
+ witness = concrete->getWitnessDecl (found, nullptr );
261
263
262
264
// It is possible that a requirement is visible to us, but
263
265
// not the witness. In this case, just return the requirement;
@@ -300,12 +302,11 @@ convertToUnqualifiedLookupOptions(NameLookupOptions options) {
300
302
LookupResult TypeChecker::lookupUnqualified (DeclContext *dc, DeclName name,
301
303
SourceLoc loc,
302
304
NameLookupOptions options) {
303
- UnqualifiedLookup lookup (name, dc, this , loc,
305
+ UnqualifiedLookup lookup (name, dc, nullptr , loc,
304
306
convertToUnqualifiedLookupOptions (options));
305
307
306
308
LookupResult result;
307
- LookupResultBuilder builder (*this , result, dc, options,
308
- /* memberLookup*/ false );
309
+ LookupResultBuilder builder (result, dc, options, /* memberLookup*/ false );
309
310
for (auto idx : indices (lookup.Results )) {
310
311
const auto &found = lookup.Results [idx];
311
312
// Determine which type we looked through to find this result.
@@ -336,7 +337,7 @@ TypeChecker::lookupUnqualifiedType(DeclContext *dc, DeclName name,
336
337
{
337
338
// Try lookup without ProtocolMembers first.
338
339
UnqualifiedLookup lookup (
339
- name, dc, this , loc,
340
+ name, dc, nullptr , loc,
340
341
ulOptions - UnqualifiedLookup::Flags::AllowProtocolMembers);
341
342
342
343
if (!lookup.Results .empty () ||
@@ -352,7 +353,7 @@ TypeChecker::lookupUnqualifiedType(DeclContext *dc, DeclName name,
352
353
// is called too early, we start resolving extensions -- even those
353
354
// which do provide not conformances.
354
355
UnqualifiedLookup lookup (
355
- name, dc, this , loc,
356
+ name, dc, nullptr , loc,
356
357
ulOptions | UnqualifiedLookup::Flags::AllowProtocolMembers);
357
358
358
359
return LookupResult (lookup.Results , lookup.IndexOfFirstOuterResult );
@@ -380,10 +381,10 @@ LookupResult TypeChecker::lookupMember(DeclContext *dc,
380
381
subOptions &= ~NL_RemoveOverridden;
381
382
subOptions &= ~NL_RemoveNonVisible;
382
383
383
- LookupResultBuilder builder (* this , result, dc, options,
384
+ LookupResultBuilder builder (result, dc, options,
384
385
/* memberLookup*/ true );
385
386
SmallVector<ValueDecl *, 4 > lookupResults;
386
- dc->lookupQualified (type, name, subOptions, this , lookupResults);
387
+ dc->lookupQualified (type, name, subOptions, nullptr , lookupResults);
387
388
388
389
for (auto found : lookupResults)
389
390
builder.add (found, nullptr , type, /* isOuter=*/ false );
0 commit comments