public virtual Differences VisitMethodCall(MethodCall call1, MethodCall call2){ Differences differences = new Differences(call1, call2); if (call1 == null || call2 == null){ if (call1 != call2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++; return differences; } MethodCall changes = (MethodCall)call2.Clone(); MethodCall deletions = (MethodCall)call2.Clone(); MethodCall insertions = (MethodCall)call2.Clone(); Differences diff = this.VisitExpression(call1.Callee, call2.Callee); if (diff == null){Debug.Assert(false); return differences;} changes.Callee = diff.Changes as Expression; deletions.Callee = diff.Deletions as Expression; insertions.Callee = diff.Insertions as Expression; Debug.Assert(diff.Changes == changes.Callee && diff.Deletions == deletions.Callee && diff.Insertions == insertions.Callee); differences.NumberOfDifferences += diff.NumberOfDifferences; differences.NumberOfSimilarities += diff.NumberOfSimilarities; if (call1.IsTailCall == call2.IsTailCall) differences.NumberOfSimilarities++; else differences.NumberOfDifferences++; ExpressionList exprChanges, exprDeletions, exprInsertions; diff = this.VisitExpressionList(call1.Operands, call2.Operands, out exprChanges, out exprDeletions, out exprInsertions); if (diff == null){Debug.Assert(false); return differences;} changes.Operands = exprChanges; deletions.Operands = exprDeletions; insertions.Operands = exprInsertions; 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 VisitMethodCall(MethodCall call) { if (call == null) return null; return base.VisitMethodCall((MethodCall)call.Clone()); }