namespace Jint.Runtime.Debugger; /// /// Equality comparer for BreakLocation matching null Source to any other Source. /// /// /// Equals returns true if all properties are equal - or if Source is null on either BreakLocation. /// GetHashCode excludes Source. /// internal sealed class OptionalSourceBreakLocationEqualityComparer : IEqualityComparer { public bool Equals(BreakLocation? x, BreakLocation? y) { if (ReferenceEquals(x, y)) { return true; } if (x is null || y is null) { return false; } return x.Line == y.Line && x.Column == y.Column && (x.Source == null || y.Source == null || string.Equals(x.Source, y.Source, StringComparison.Ordinal)); } public int GetHashCode(BreakLocation? obj) { if (obj == null) { return 0; } // Keeping this rather than HashCode.Combine, which isn't in net461 or netstandard2.0 unchecked { int hash = 17; hash = hash * 33 + obj.Line.GetHashCode(); hash = hash * 33 + obj.Column.GetHashCode(); // Don't include Source return hash; } } }