public virtual Differences VisitAnonymousNestedFunction(AnonymousNestedFunction/*!*/ func1, AnonymousNestedFunction func2) { Differences differences = new Differences(func1, func2); if (func1 == null || func2 == null){ if (func1 != func2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++; return differences; } AnonymousNestedFunction changes = (AnonymousNestedFunction)func2.Clone(); AnonymousNestedFunction deletions = (AnonymousNestedFunction)func2.Clone(); AnonymousNestedFunction insertions = (AnonymousNestedFunction)func2.Clone(); Differences diff = this.VisitBlock(func1.Body, func2.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; ParameterList parChanges, parDeletions, parInsertions; diff = this.VisitParameterList(func1.Parameters, func2.Parameters, out parChanges, out parDeletions, out parInsertions); if (diff == null){Debug.Assert(false); return differences;} changes.Parameters = parChanges; deletions.Parameters = parDeletions; insertions.Parameters = parInsertions; 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 VisitAnonymousNestedFunction(AnonymousNestedFunction func) { if (func == null) return null; AnonymousNestedFunction dup = (AnonymousNestedFunction)func.Clone(); if (func.Method != null) { dup.Method = this.VisitMethod(func.Method); //^ assume dup.Method != null; dup.Parameters = dup.Method.Parameters; dup.Body = dup.Method.Body; return dup; } return base.VisitAnonymousNestedFunction(dup); }