public virtual Differences VisitLock(Lock lock1, Lock lock2){ Differences differences = new Differences(lock1, lock2); if (lock1 == null || lock2 == null){ if (lock1 != lock2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++; return differences; } Lock changes = (Lock)lock2.Clone(); Lock deletions = (Lock)lock2.Clone(); Lock insertions = (Lock)lock2.Clone(); Differences diff = this.VisitBlock(lock1.Body, lock2.Body); if (diff == null){Debug.Assert(false); return differences;} changes.Body = diff.Changes as Block; deletions.Body = diff.Deletions as Block; insertions.Body = diff.Insertions as Block; Debug.Assert(diff.Changes == changes.Body && diff.Deletions == deletions.Body && diff.Insertions == insertions.Body); differences.NumberOfDifferences += diff.NumberOfDifferences; differences.NumberOfSimilarities += diff.NumberOfSimilarities; diff = this.VisitExpression(lock1.Guard, lock2.Guard); if (diff == null){Debug.Assert(false); return differences;} changes.Guard = diff.Changes as Expression; deletions.Guard = diff.Deletions as Expression; insertions.Guard = diff.Insertions as Expression; Debug.Assert(diff.Changes == changes.Guard && diff.Deletions == deletions.Guard && diff.Insertions == insertions.Guard); differences.NumberOfDifferences += diff.NumberOfDifferences; differences.NumberOfSimilarities += diff.NumberOfSimilarities; if (differences.NumberOfDifferences == 0){ differences.Changes = null; differences.Deletions = null; differences.Insertions = null; }else{ differences.Changes = changes; differences.Deletions = deletions; differences.Insertions = insertions; } return differences; }
public override Statement VisitLock(Lock Lock) { if (Lock == null) return null; return base.VisitLock((Lock)Lock.Clone()); }