////// private Types.Object CallClosure(Types.Closure closure, Types.Object parameters) { if (!parameters.Itself.IsUndefined) { Types.List.ListElement pointer = (parameters as Types.List).First; for (int i = 0; pointer != null; pointer = pointer.Next, i++) { closure.Environment.SetLocal(new Types.Identifier { Name = closure.Parameters[i] }, pointer.Value.Itself); } } return(new Interpreter(closure.Environment.Copy()).Evaluate(closure.Body)); }
private Types.Object EvaluateClosure(Node.Function node) { List <string> parameters = new List <string>(); for (Node.Names next = node.N; next != null; next = next.N) { parameters.Add(next.Id.id); } Types.Closure closure = new Types.Closure { Body = node.E, Parameters = parameters, Environment = new Env(this.Environment), }; return(closure); }