public virtual Differences VisitConstructArray(ConstructArray consArr1, ConstructArray consArr2){ Differences differences = new Differences(consArr1, consArr2); if (consArr1 == null || consArr2 == null){ if (consArr1 != consArr2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++; return differences; } ConstructArray changes = (ConstructArray)consArr2.Clone(); ConstructArray deletions = (ConstructArray)consArr2.Clone(); ConstructArray insertions = (ConstructArray)consArr2.Clone(); Differences diff = this.VisitTypeNode(consArr1.ElementType, consArr2.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; ExpressionList exprChanges, exprDeletions, exprInsertions; diff = this.VisitExpressionList(consArr1.Initializers, consArr2.Initializers, 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; diff = this.VisitExpressionList(consArr1.Operands, consArr2.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 (consArr1.Rank == consArr2.Rank) differences.NumberOfSimilarities++; else differences.NumberOfDifferences++; diff = this.VisitExpression(consArr1.Owner, consArr2.Owner); if (diff == null) { Debug.Assert(false); return differences; } changes.Owner = diff.Changes as Expression; deletions.Owner = diff.Deletions as Expression; insertions.Owner = diff.Insertions as Expression; Debug.Assert(diff.Changes == changes.Owner && diff.Deletions == deletions.Owner && diff.Insertions == insertions.Owner); 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 VisitConstructArray(ConstructArray consArr) { if (consArr == null) return null; return base.VisitConstructArray((ConstructArray)consArr.Clone()); }