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