bool MatchingTranspilationDendencies(IFileCache owner, List <DependencyTriplet> transpilationDependencies) { if (transpilationDependencies == null) { return(true); } var hashToName = new Dictionary <byte[], string>(StructuralEqualityComparer <byte[]> .Default); hashToName.Add(owner.HashOfContent, owner.FullPath); var processed = new StructList <bool>(); processed.RepeatAdd(false, (uint)transpilationDependencies.Count); bool somethingFailed; do { var somethingProcessed = false; somethingFailed = false; for (var i = 0u; i < processed.Count; i++) { if (processed[i]) { continue; } var dep = transpilationDependencies[(int)i]; if (!hashToName.TryGetValue(dep.SourceHash, out var sourceName)) { somethingFailed = true; continue; } somethingProcessed = true; processed[i] = true; var targetName = ResolveImport(sourceName, dep.Import); if (targetName == "?") { return(false); } Result.Path2FileInfo.TryGetValue(targetName, out var targetInfo); if (!dep.TargetHash.AsSpan().SequenceEqual(targetInfo.Owner.HashOfContent)) { return(false); } hashToName.TryAdd(targetInfo.Owner.HashOfContent, targetInfo.Owner.FullPath); } if (!somethingProcessed) { return(!somethingFailed); } } while (somethingFailed); return(true); }