private AbstractNode AddParms(AbstractNode invocation, IList <object> parameters)
        {
            if (invocation == null)
            {
                throw new ArgumentNullException("invocation");
            }

            var m = invocation as Statement;

            if (m != null)
            {
                invocation = m.DeepCopy();
            }
            else
            {
                var q = invocation as Expression;
                if (q != null)
                {
                    invocation = q.DeepCopy();
                }
                else
                {
                    throw new Exception("Found a " + invocation.GetType());
                }
            }

            InvocationExpression ie = FirstInvocationExpression(invocation);

            foreach (var o in parameters)
            {
                ie.AddArg(o);
            }

            return(invocation);
        }