Skip to content

Commit 9141ddf

Browse files
committed
Split External Dependency Enumeration from UsedDeclEnumerator
1 parent dab204e commit 9141ddf

File tree

1 file changed

+43
-10
lines changed

1 file changed

+43
-10
lines changed

lib/AST/FrontendSourceFileDepGraphFactory.cpp

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -402,16 +402,14 @@ namespace {
402402
/// Extracts uses out of a SourceFile
403403
class UsedDeclEnumerator {
404404
const SourceFile *SF;
405-
const DependencyTracker &depTracker;
406405
StringRef swiftDeps;
407406

408407
/// Cache these for efficiency
409408
const DependencyKey sourceFileImplementation;
410409

411410
public:
412-
UsedDeclEnumerator(const SourceFile *SF, const DependencyTracker &depTracker,
413-
StringRef swiftDeps)
414-
: SF(SF), depTracker(depTracker), swiftDeps(swiftDeps),
411+
UsedDeclEnumerator(const SourceFile *SF, StringRef swiftDeps)
412+
: SF(SF), swiftDeps(swiftDeps),
415413
sourceFileImplementation(DependencyKey::createKeyForWholeSourceFile(
416414
DeclAspect::implementation, swiftDeps)) {}
417415

@@ -446,7 +444,6 @@ class UsedDeclEnumerator {
446444
}
447445
}
448446
});
449-
enumerateExternalUses(enumerator);
450447
enumerateNominalUses(enumerator);
451448
}
452449

@@ -474,23 +471,59 @@ class UsedDeclEnumerator {
474471
enumerateUse<NodeKind::nominal>(context, "", enumerator);
475472
});
476473
}
474+
};
475+
} // end namespace
476+
477+
namespace {
478+
class ExternalDependencyEnumerator {
479+
const DependencyTracker &depTracker;
480+
const DependencyKey sourceFileImplementation;
481+
482+
public:
483+
using UseEnumerator = llvm::function_ref<void(
484+
const DependencyKey &, const DependencyKey &, Optional<Fingerprint>)>;
485+
486+
ExternalDependencyEnumerator(const DependencyTracker &depTracker,
487+
StringRef swiftDeps)
488+
: depTracker(depTracker),
489+
sourceFileImplementation(DependencyKey::createKeyForWholeSourceFile(
490+
DeclAspect::implementation, swiftDeps)) {}
477491

478492
void enumerateExternalUses(UseEnumerator enumerator) {
479-
for (StringRef s : depTracker.getIncrementalDependencies())
480-
enumerateUse<NodeKind::incrementalExternalDepend>("", s, enumerator);
493+
for (const auto &id : depTracker.getIncrementalDependencies()) {
494+
enumerateUse<NodeKind::incrementalExternalDepend>(enumerator, id.path,
495+
id.fingerprint);
496+
}
497+
for (StringRef s : depTracker.getDependencies()) {
498+
enumerateUse<NodeKind::externalDepend>(enumerator, s, None);
499+
}
500+
}
481501

482-
for (StringRef s : depTracker.getDependencies())
483-
enumerateUse<NodeKind::externalDepend>("", s, enumerator);
502+
private:
503+
template <NodeKind kind>
504+
void enumerateUse(UseEnumerator createDefUse, StringRef name,
505+
Optional<Fingerprint> maybeFP) {
506+
static_assert(kind == NodeKind::incrementalExternalDepend ||
507+
kind == NodeKind::externalDepend,
508+
"Not a kind of external dependency!");
509+
createDefUse(DependencyKey(kind, DeclAspect::interface, "", name.str()),
510+
sourceFileImplementation, maybeFP);
484511
}
485512
};
486513
} // end namespace
487514

488515
void FrontendSourceFileDepGraphFactory::addAllUsedDecls() {
489-
UsedDeclEnumerator(SF, depTracker, swiftDeps)
516+
UsedDeclEnumerator(SF, swiftDeps)
490517
.enumerateAllUses(
491518
[&](const DependencyKey &def, const DependencyKey &use) {
492519
addAUsedDecl(def, use);
493520
});
521+
ExternalDependencyEnumerator(depTracker, swiftDeps)
522+
.enumerateExternalUses([&](const DependencyKey &def,
523+
const DependencyKey &use,
524+
Optional<Fingerprint> maybeFP) {
525+
addAnExternalDependency(def, use, maybeFP);
526+
});
494527
}
495528

496529
//==============================================================================

0 commit comments

Comments
 (0)