public virtual Differences VisitAssignmentStatement(AssignmentStatement assignment1, AssignmentStatement assignment2){ Differences differences = new Differences(assignment1, assignment2); if (assignment1 == null || assignment2 == null){ if (assignment1 != assignment2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++; return differences; } AssignmentStatement changes = (AssignmentStatement)assignment2.Clone(); AssignmentStatement deletions = (AssignmentStatement)assignment2.Clone(); AssignmentStatement insertions = (AssignmentStatement)assignment2.Clone(); if (assignment1.Operator == assignment2.Operator) differences.NumberOfSimilarities++; else differences.NumberOfDifferences++; Differences diff = this.VisitExpression(assignment1.Source, assignment2.Source); if (diff == null){Debug.Assert(false); return differences;} changes.Source = diff.Changes as Expression; deletions.Source = diff.Deletions as Expression; insertions.Source = diff.Insertions as Expression; Debug.Assert(diff.Changes == changes.Source && diff.Deletions == deletions.Source && diff.Insertions == insertions.Source); differences.NumberOfDifferences += diff.NumberOfDifferences; differences.NumberOfSimilarities += diff.NumberOfSimilarities; diff = this.VisitExpression(assignment1.Target, assignment2.Target); if (diff == null){Debug.Assert(false); return differences;} changes.Target = diff.Changes as Expression; deletions.Target = diff.Deletions as Expression; insertions.Target = diff.Insertions as Expression; Debug.Assert(diff.Changes == changes.Target && diff.Deletions == deletions.Target && diff.Insertions == insertions.Target); 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 VisitAssignmentStatement(AssignmentStatement assignment) { if (assignment == null) return null; return base.VisitAssignmentStatement((AssignmentStatement)assignment.Clone()); }