@@ -381,28 +381,12 @@ void Evaluator::dumpDependenciesGraphviz() const {
381
381
382
382
void evaluator::DependencyRecorder::realize (
383
383
const DependencyCollector::Reference &ref) {
384
- auto *tracker = getActiveDependencyTracker ();
385
- assert (tracker && " cannot realize dependency without name tracker!" );
386
-
387
- using Kind = evaluator::DependencyCollector::Reference::Kind;
388
- switch (ref.kind ) {
389
- case Kind::Empty:
390
- case Kind::Tombstone:
391
- llvm_unreachable (" cannot record empty dependency" );
392
- case Kind::UsedMember:
393
- tracker->addUsedMember ({ref.subject , ref.name }, isActiveSourceCascading ());
394
- break ;
395
- case Kind::PotentialMember:
396
- tracker->addUsedMember ({ref.subject , Identifier ()},
397
- isActiveSourceCascading ());
398
- break ;
399
- case Kind::TopLevel:
400
- tracker->addTopLevelName (ref.name , isActiveSourceCascading ());
401
- break ;
402
- case Kind::Dynamic:
403
- tracker->addDynamicLookupName (ref.name , isActiveSourceCascading ());
404
- break ;
384
+ auto *source = getActiveDependencySourceOrNull ();
385
+ assert (source && " cannot realize dependency without associated file!" );
386
+ if (!source->hasInterfaceHash ()) {
387
+ return ;
405
388
}
389
+ fileReferences[source].insert (ref);
406
390
}
407
391
408
392
void evaluator::DependencyCollector::addUsedMember (NominalTypeDecl *subject,
@@ -449,7 +433,8 @@ void evaluator::DependencyRecorder::record(
449
433
const llvm::SetVector<swift::ActiveRequest> &stack,
450
434
llvm::function_ref<void (DependencyCollector &)> rec) {
451
435
assert (!isRecording && " Probably not a good idea to allow nested recording" );
452
- if (!getActiveDependencyTracker ()) {
436
+ auto *source = getActiveDependencySourceOrNull ();
437
+ if (!source || !source->hasInterfaceHash ()) {
453
438
return ;
454
439
}
455
440
@@ -480,7 +465,8 @@ void evaluator::DependencyRecorder::record(
480
465
void evaluator::DependencyRecorder::replay (const swift::ActiveRequest &req) {
481
466
assert (!isRecording && " Probably not a good idea to allow nested recording" );
482
467
483
- if (mode == Mode::StatusQuo || !getActiveDependencyTracker ()) {
468
+ auto *source = getActiveDependencySourceOrNull ();
469
+ if (mode == Mode::StatusQuo || !source || !source->hasInterfaceHash ()) {
484
470
return ;
485
471
}
486
472
@@ -497,3 +483,26 @@ void evaluator::DependencyRecorder::replay(const swift::ActiveRequest &req) {
497
483
realize (ref);
498
484
}
499
485
}
486
+
487
+ using namespace swift ;
488
+
489
+ void evaluator::DependencyRecorder::enumerateReferencesInFile (
490
+ const SourceFile *SF, ReferenceEnumerator f) const {
491
+ auto entry = fileReferences.find (SF);
492
+ if (entry == fileReferences.end ()) {
493
+ return ;
494
+ }
495
+
496
+ for (const auto &ref : entry->getSecond ()) {
497
+ switch (ref.kind ) {
498
+ case DependencyCollector::Reference::Kind::Empty:
499
+ case DependencyCollector::Reference::Kind::Tombstone:
500
+ llvm_unreachable (" Cannot enumerate dead reference!" );
501
+ case DependencyCollector::Reference::Kind::UsedMember:
502
+ case DependencyCollector::Reference::Kind::PotentialMember:
503
+ case DependencyCollector::Reference::Kind::TopLevel:
504
+ case DependencyCollector::Reference::Kind::Dynamic:
505
+ f (ref);
506
+ }
507
+ }
508
+ }
0 commit comments