Exemplo n.º 1
0
        //////

        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));
        }
Exemplo n.º 2
0
        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);
        }