private object ExecuteFunction(StringSegment _name, IList <object> l_params) { string name = _name.Trim().ToString(); object[] a_evaluated = null; if (l_params != null) { a_evaluated = new object[l_params.Count]; l_params.CopyTo(a_evaluated, 0); for (int i = 0; i < a_evaluated.Length; ++i) { IEvaluator expr = a_evaluated[i] as IEvaluator; if (expr != null) { a_evaluated[i] = expr.Evaluate(); } } } ObjectContext context = CurrentContext.FindFunctionContext(name); if (context == null) { throw ThrowHelper.UndefinedFunction(name); } else { TFunctionData _sframe = new TFunctionData(CurrentExecution); _sframe.SetAll(a_evaluated); _sframe.Name = name; context.GetFunction(name).Invoke(_sframe); CurrentContext.SetReturns(_sframe); return(_sframe.Data); } }
internal static void Execute(TFunctionData stackFrame, Line codeLine) { ObjectContext context = stackFrame.Context.FindCommandContext(codeLine.Name); if (context == null) { Evaluator eval = new Evaluator(new StringSegment(codeLine.Text), stackFrame.StackExecuter); object result = eval.Evaluate(); stackFrame.Context.PersistReturns(stackFrame); stackFrame.Data = result; } else if (codeLine.IsFunction) { throw ThrowHelper.ExpectedSpaceAfterCommand(); } else { stackFrame.SetAll(codeLine.Text); context.GetCommand(codeLine.Name).Invoke(stackFrame); } stackFrame.Context.SetReturns(stackFrame); }