public virtual dynamic Apply(JavaScriptEvaluator e, dynamic self, params dynamic[] args)
            {
                var     originalContext        = e.env;
                var     originalReturningState = e.isReturning;
                dynamic result = null;

                try
                {
                    e.env         = capture.AddBinding("this", self);
                    e.isReturning = false;
                    int i = 0;
                    foreach (var p in parms.Nodes)
                    {
                        e.AddBinding(p.Text, args[i++]);
                    }
                    e.Eval(body);
                    result = e.result;
                }
                finally
                {
                    e.result      = null;
                    e.env         = originalContext;
                    e.isReturning = originalReturningState;
                }
                return(result);
            }
            public virtual dynamic Apply(JavaScriptEvaluator e, dynamic self, params dynamic[] args)
            {
                var originalContext = e.env;
                var originalReturningState = e.isReturning;
                dynamic result = null;

                try
                {
                    e.env = capture.AddBinding("this", self);                    
                    e.isReturning = false;
                    int i = 0;
                    foreach (var p in parms.Nodes)
                        e.AddBinding(p.Text, args[i++]);                    
                    e.Eval(body);
                    result = e.result;
                }
                finally
                {
                    e.result = null;
                    e.env = originalContext;
                    e.isReturning = originalReturningState;
                }
                return result;
            }