public virtual Differences VisitStackAlloc(StackAlloc alloc1, StackAlloc alloc2){ Differences differences = new Differences(alloc1, alloc2); if (alloc1 == null || alloc2 == null){ if (alloc1 != alloc2) differences.NumberOfDifferences++; else differences.NumberOfSimilarities++; return differences; } StackAlloc changes = (StackAlloc)alloc2.Clone(); StackAlloc deletions = (StackAlloc)alloc2.Clone(); StackAlloc insertions = (StackAlloc)alloc2.Clone(); Differences diff = this.VisitTypeNode(alloc1.ElementType, alloc2.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.VisitExpression(alloc1.NumberOfElements, alloc2.NumberOfElements); if (diff == null){Debug.Assert(false); return differences;} changes.NumberOfElements = diff.Changes as Expression; deletions.NumberOfElements = diff.Deletions as Expression; insertions.NumberOfElements = diff.Insertions as Expression; Debug.Assert(diff.Changes == changes.NumberOfElements && diff.Deletions == deletions.NumberOfElements && diff.Insertions == insertions.NumberOfElements); 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; }