private void DeleteFrom(BasicBlock block, BasicBlock target, Set <BasicBlock> visited) { if (!visited.Contains(this) && !Equals(block)) { visited.Add(this); for (var i = 0; i < Sources.Count; i++) { if (Sources[i].Equals(block)) { Sources.RemoveAt(i); foreach (var s in block.Sources) { if (!Sources.Contains(s)) { Sources.Add(s); } } break; } } FixupTargets(block, target); foreach (var t in Targets) { t.DeleteFrom(block, target, visited); } } }