public bool Equals(SourceLocationInfo source) { if (Count == source.GetRecords().Count) { bool result = true; for (int i = 0; i < Count; i++) { result = result && this[i].Equals(source.GetRecords()[i]); } return(result); } // handling the case where the verifier ignores header and we don't // refer OpenCL/atomics/refined_atomic_abstraction/access_in_loop as an example if (source.GetRecords().Count == 1) { SourceLocationInfo.Record record = source.GetRecords().First(); if (this.Count(x => x.File == record.GetFile()) == 1) { return(this.First(x => x.File == record.GetFile()).Equals(record)); } } return(false); }
public static IEnumerable <LocationChain> GetLocationChain(this SourceLocationInfo source) { List <LocationChain> chains = new List <LocationChain>(); foreach (LocationChain chain in ProgramMetadata.Locations.Values) { if (chain.Equals(source)) { chains.Add(chain); return(chains); } } foreach (LocationChain chain in ProgramMetadata.Locations.Values) { if (chain.Last().Equals(source.GetRecords().Last())) { chains.Add(chain); } } return(chains); }