protected override Expression VisitParameter(ParameterExpression p)
        {
            InvocationExpander expander = this;

            while (null != expander)
            {
                if (expander._parameter == p)
                {
                    return(base.Visit(expander._expansion));
                }
                expander = expander._previous;
            }
            return(base.VisitParameter(p));
        }
 public InvocationExpander(ParameterExpression parameter, Expression expansion, InvocationExpander previous)
 {
     _parameter = parameter;
     _expansion = expansion;
     _previous  = previous;
 }