@@ -408,23 +408,17 @@ class UsedDeclEnumerator {
408
408
// / Cache these for efficiency
409
409
const DependencyKey sourceFileImplementation;
410
410
411
- function_ref<void (const DependencyKey &, const DependencyKey &)> createDefUse;
412
-
413
411
public:
414
- UsedDeclEnumerator (
415
- const SourceFile *SF, const DependencyTracker &depTracker,
416
- StringRef swiftDeps,
417
- function_ref<void (const DependencyKey &, const DependencyKey &)>
418
- createDefUse)
412
+ UsedDeclEnumerator (const SourceFile *SF, const DependencyTracker &depTracker,
413
+ StringRef swiftDeps)
419
414
: SF(SF), depTracker(depTracker), swiftDeps(swiftDeps),
420
- sourceFileInterface (DependencyKey::createKeyForWholeSourceFile(
421
- DeclAspect::interface, swiftDeps)),
422
415
sourceFileImplementation (DependencyKey::createKeyForWholeSourceFile(
423
- DeclAspect::implementation, swiftDeps)),
424
- createDefUse(createDefUse) {}
416
+ DeclAspect::implementation, swiftDeps)) {}
425
417
426
418
public:
427
- void enumerateAllUses () {
419
+ using UseEnumerator =
420
+ llvm::function_ref<void (const DependencyKey &, const DependencyKey &)>;
421
+ void enumerateAllUses (UseEnumerator enumerator) {
428
422
auto &Ctx = SF->getASTContext ();
429
423
Ctx.evaluator .enumerateReferencesInFile (SF, [&](const auto &ref) {
430
424
std::string name = ref.name .userFacingName ().str ();
@@ -436,36 +430,37 @@ class UsedDeclEnumerator {
436
430
case Kind::Tombstone:
437
431
llvm_unreachable (" Cannot enumerate dead reference!" );
438
432
case Kind::TopLevel:
439
- return enumerateUse<NodeKind::topLevel>(" " , name);
433
+ return enumerateUse<NodeKind::topLevel>(" " , name, enumerator );
440
434
case Kind::Dynamic:
441
- return enumerateUse<NodeKind::dynamicLookup>(" " , name);
435
+ return enumerateUse<NodeKind::dynamicLookup>(" " , name, enumerator );
442
436
case Kind::PotentialMember: {
443
437
std::string context = DependencyKey::computeContextForProvidedEntity<
444
438
NodeKind::potentialMember>(nominal);
445
- return enumerateUse<NodeKind::potentialMember>(context, " " );
439
+ return enumerateUse<NodeKind::potentialMember>(context, " " , enumerator );
446
440
}
447
441
case Kind::UsedMember: {
448
442
std::string context =
449
443
DependencyKey::computeContextForProvidedEntity<NodeKind::member>(
450
444
nominal);
451
- return enumerateUse<NodeKind::member>(context, name);
445
+ return enumerateUse<NodeKind::member>(context, name, enumerator );
452
446
}
453
447
}
454
448
});
455
- enumerateExternalUses ();
456
- enumerateNominalUses ();
449
+ enumerateExternalUses (enumerator );
450
+ enumerateNominalUses (enumerator );
457
451
}
458
452
459
453
private:
460
454
template <NodeKind kind>
461
- void enumerateUse (StringRef context, StringRef name) {
455
+ void enumerateUse (StringRef context, StringRef name,
456
+ UseEnumerator createDefUse) {
462
457
// Assume that what is depended-upon is the interface
463
458
createDefUse (
464
459
DependencyKey (kind, DeclAspect::interface, context.str (), name.str ()),
465
460
sourceFileImplementation);
466
461
}
467
462
468
- void enumerateNominalUses () {
463
+ void enumerateNominalUses (UseEnumerator enumerator ) {
469
464
auto &Ctx = SF->getASTContext ();
470
465
Ctx.evaluator .enumerateReferencesInFile (SF, [&](const auto &ref) {
471
466
const NominalTypeDecl *subject = ref.subject ;
@@ -476,26 +471,26 @@ class UsedDeclEnumerator {
476
471
std::string context =
477
472
DependencyKey::computeContextForProvidedEntity<NodeKind::nominal>(
478
473
subject);
479
- enumerateUse<NodeKind::nominal>(context, " " );
474
+ enumerateUse<NodeKind::nominal>(context, " " , enumerator );
480
475
});
481
476
}
482
477
483
- void enumerateExternalUses () {
478
+ void enumerateExternalUses (UseEnumerator enumerator ) {
484
479
for (StringRef s : depTracker.getIncrementalDependencies ())
485
- enumerateUse<NodeKind::incrementalExternalDepend>(" " , s);
480
+ enumerateUse<NodeKind::incrementalExternalDepend>(" " , s, enumerator );
486
481
487
482
for (StringRef s : depTracker.getDependencies ())
488
- enumerateUse<NodeKind::externalDepend>(" " , s);
483
+ enumerateUse<NodeKind::externalDepend>(" " , s, enumerator );
489
484
}
490
485
};
491
486
} // end namespace
492
487
493
488
void FrontendSourceFileDepGraphFactory::addAllUsedDecls () {
494
- UsedDeclEnumerator (SF, depTracker, swiftDeps,
495
- [&]( const DependencyKey &def, const DependencyKey &use) {
496
- addAUsedDecl ( def, use);
497
- })
498
- . enumerateAllUses ( );
489
+ UsedDeclEnumerator (SF, depTracker, swiftDeps)
490
+ . enumerateAllUses (
491
+ [&]( const DependencyKey & def, const DependencyKey & use) {
492
+ addAUsedDecl (def, use);
493
+ } );
499
494
}
500
495
501
496
// ==============================================================================
0 commit comments