@@ -406,26 +406,19 @@ class UsedDeclEnumerator {
406406 StringRef swiftDeps;
407407
408408 // / Cache these for efficiency
409- const DependencyKey sourceFileInterface;
410409 const DependencyKey sourceFileImplementation;
411410
412- function_ref<void (const DependencyKey &, const DependencyKey &)> createDefUse;
413-
414411public:
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)
420414 : SF(SF), depTracker(depTracker), swiftDeps(swiftDeps),
421- sourceFileInterface (DependencyKey::createKeyForWholeSourceFile(
422- DeclAspect::interface, swiftDeps)),
423415 sourceFileImplementation (DependencyKey::createKeyForWholeSourceFile(
424- DeclAspect::implementation, swiftDeps)),
425- createDefUse(createDefUse) {}
416+ DeclAspect::implementation, swiftDeps)) {}
426417
427418public:
428- void enumerateAllUses () {
419+ using UseEnumerator =
420+ llvm::function_ref<void (const DependencyKey &, const DependencyKey &)>;
421+ void enumerateAllUses (UseEnumerator enumerator) {
429422 auto &Ctx = SF->getASTContext ();
430423 Ctx.evaluator .enumerateReferencesInFile (SF, [&](const auto &ref) {
431424 std::string name = ref.name .userFacingName ().str ();
@@ -437,36 +430,37 @@ class UsedDeclEnumerator {
437430 case Kind::Tombstone:
438431 llvm_unreachable (" Cannot enumerate dead reference!" );
439432 case Kind::TopLevel:
440- return enumerateUse<NodeKind::topLevel>(" " , name);
433+ return enumerateUse<NodeKind::topLevel>(" " , name, enumerator );
441434 case Kind::Dynamic:
442- return enumerateUse<NodeKind::dynamicLookup>(" " , name);
435+ return enumerateUse<NodeKind::dynamicLookup>(" " , name, enumerator );
443436 case Kind::PotentialMember: {
444437 std::string context = DependencyKey::computeContextForProvidedEntity<
445438 NodeKind::potentialMember>(nominal);
446- return enumerateUse<NodeKind::potentialMember>(context, " " );
439+ return enumerateUse<NodeKind::potentialMember>(context, " " , enumerator );
447440 }
448441 case Kind::UsedMember: {
449442 std::string context =
450443 DependencyKey::computeContextForProvidedEntity<NodeKind::member>(
451444 nominal);
452- return enumerateUse<NodeKind::member>(context, name);
445+ return enumerateUse<NodeKind::member>(context, name, enumerator );
453446 }
454447 }
455448 });
456- enumerateExternalUses ();
457- enumerateNominalUses ();
449+ enumerateExternalUses (enumerator );
450+ enumerateNominalUses (enumerator );
458451 }
459452
460453private:
461454 template <NodeKind kind>
462- void enumerateUse (StringRef context, StringRef name) {
455+ void enumerateUse (StringRef context, StringRef name,
456+ UseEnumerator createDefUse) {
463457 // Assume that what is depended-upon is the interface
464458 createDefUse (
465459 DependencyKey (kind, DeclAspect::interface, context.str (), name.str ()),
466460 sourceFileImplementation);
467461 }
468462
469- void enumerateNominalUses () {
463+ void enumerateNominalUses (UseEnumerator enumerator ) {
470464 auto &Ctx = SF->getASTContext ();
471465 Ctx.evaluator .enumerateReferencesInFile (SF, [&](const auto &ref) {
472466 const NominalTypeDecl *subject = ref.subject ;
@@ -477,26 +471,26 @@ class UsedDeclEnumerator {
477471 std::string context =
478472 DependencyKey::computeContextForProvidedEntity<NodeKind::nominal>(
479473 subject);
480- enumerateUse<NodeKind::nominal>(context, " " );
474+ enumerateUse<NodeKind::nominal>(context, " " , enumerator );
481475 });
482476 }
483477
484- void enumerateExternalUses () {
478+ void enumerateExternalUses (UseEnumerator enumerator ) {
485479 for (StringRef s : depTracker.getIncrementalDependencies ())
486- enumerateUse<NodeKind::incrementalExternalDepend>(" " , s);
480+ enumerateUse<NodeKind::incrementalExternalDepend>(" " , s, enumerator );
487481
488482 for (StringRef s : depTracker.getDependencies ())
489- enumerateUse<NodeKind::externalDepend>(" " , s);
483+ enumerateUse<NodeKind::externalDepend>(" " , s, enumerator );
490484 }
491485};
492486} // end namespace
493487
494488void 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+ } );
500494}
501495
502496// ==============================================================================
0 commit comments