public virtual Differences VisitDoWhile(DoWhile doWhile1, DoWhile doWhile2){ Differences differences = new Differences(doWhile1, doWhile2); if (doWhile1 == null || doWhile2 == null){ if (doWhile1 != doWhile2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++; return differences; } DoWhile changes = (DoWhile)doWhile2.Clone(); DoWhile deletions = (DoWhile)doWhile2.Clone(); DoWhile insertions = (DoWhile)doWhile2.Clone(); Differences diff = this.VisitBlock(doWhile1.Body, doWhile2.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.VisitExpressionList(doWhile1.Invariants, doWhile2.Invariants, out changes.Invariants, out deletions.Invariants, out insertions.Invariants); if (diff == null){Debug.Assert(false); return differences;} differences.NumberOfDifferences += diff.NumberOfDifferences; differences.NumberOfSimilarities += diff.NumberOfSimilarities; diff = this.VisitExpression(doWhile1.Condition, doWhile2.Condition); if (diff == null){Debug.Assert(false); return differences;} changes.Condition = diff.Changes as Expression; deletions.Condition = diff.Deletions as Expression; insertions.Condition = diff.Insertions as Expression; Debug.Assert(diff.Changes == changes.Condition && diff.Deletions == deletions.Condition && diff.Insertions == insertions.Condition); 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 VisitDoWhile(DoWhile doWhile) { if (doWhile == null) return null; return base.VisitDoWhile((DoWhile)doWhile.Clone()); }