Exemple #1
0
 public override Continuation Evaluate(Continuation c, Datum args)
 {
     foreach (var ab in argBodies)
     {
         var frameBindings = ab.binding(args);
         if (frameBindings == null)
         {
             continue;
         }
         var closureEnv = env.NewFrame(frameBindings);
         return(c.Evaluate(closureEnv, ab.body));
     }
     throw bindError(args);
 }
Exemple #2
0
        public override Continuation Evaluate(Continuation c, LexicalEnvironment env, Datum args)
        {
            var argList = args.ToArray();

            if (argList.Length < 1)
            {
                throw c.error("Expected at least 1 expression for begin. Got none.");
            }
            // Scope any local definitions.
            var localEnv  = env.NewFrame();
            var remaining = argList.Reverse().ToArray();

            for (var i = 0; i < remaining.Length; ++i)
            {
                if (i > 0)
                {
                    c = c.PushTask(popResult, "Discard result");
                }
                c = c.Evaluate(localEnv, remaining[i]);
            }
            return(c);
        }