protected override Expression VisitMethodCall(MethodCallExpression m) { if (m.Method.DeclaringType == typeof(SourcedElementExtensions) && m.Method.Name == "Current" && _comparer.Equals(m.Arguments[0], _enumerator)) { return(_parameter); } return(base.VisitMethodCall(m)); }
//public methods public Expression <TDelegate> Rewrite <TDelegate>(Expression <TDelegate> exp) { var current = _rewriter.Rewrite(exp.Body); Expression previous = null; while (!_comparer.Equals(current, previous)) { previous = current; current = _aligner.Align(current); current = _rewriter.Rewrite(current); } return(Expression.Lambda <TDelegate>(current, exp.Parameters)); }