public virtual Differences VisitConstructIterator(ConstructIterator consIterator1, ConstructIterator consIterator2){ Differences differences = new Differences(consIterator1, consIterator2); if (consIterator1 == null || consIterator2 == null){ if (consIterator1 != consIterator2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++; return differences; } ConstructIterator changes = (ConstructIterator)consIterator2.Clone(); ConstructIterator deletions = (ConstructIterator)consIterator2.Clone(); ConstructIterator insertions = (ConstructIterator)consIterator2.Clone(); Differences diff = this.VisitBlock(consIterator1.Body, consIterator2.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.VisitTypeNode(consIterator1.ElementType, consIterator2.ElementType); if (diff == null){Debug.Assert(false); return differences;} changes.ElementType = diff.Changes as TypeNode; deletions.ElementType = diff.Deletions as TypeNode; insertions.ElementType = diff.Insertions as TypeNode; //Debug.Assert(diff.Changes == changes.ElementType && diff.Deletions == deletions.ElementType && diff.Insertions == insertions.ElementType); differences.NumberOfDifferences += diff.NumberOfDifferences; differences.NumberOfSimilarities += diff.NumberOfSimilarities; diff = this.VisitClass(consIterator1.State, consIterator2.State); if (diff == null){Debug.Assert(false); return differences;} changes.State = diff.Changes as Class; deletions.State = diff.Deletions as Class; insertions.State = diff.Insertions as Class; //Debug.Assert(diff.Changes == changes.State && diff.Deletions == deletions.State && diff.Insertions == insertions.State); 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 Expression VisitConstructIterator(ConstructIterator consIterator) { if (consIterator == null) return null; return base.VisitConstructIterator((ConstructIterator)consIterator.Clone()); }