private static bool DeepEquals(Expression first, Expression second, EqualityExpressionVisitor visitor) { Contract.Requires((first == null && second == null) || (first != null && second != null)); Contract.Requires(visitor != null); if (first == null) { return(true); } visitor.SetOtherRoot(second); visitor.Visit(first); Contract.Assume(visitor.StackCount == 1); return(visitor.AreEqual); }
public static bool Equals(Expression first, Expression second, EqualityExpressionVisitor visitor) { Contract.Requires(visitor != null); return(visitor.ShallowEquals(first, second) && DeepEquals(first, second, visitor)); }