Evaluate() public method

public Evaluate ( LexicalEnvironment e, Datum expression ) : Continuation
e LexicalEnvironment
expression Datum
return Continuation
Esempio n. 1
0
 public override Continuation Evaluate(Continuation s, Datum args)
 {
     var argArray = args.ToArray();
     var expression = argArray[0];
     var environment = (Environment) argArray[1].CastObject();
     return s.Evaluate(environment, expression);
 }
Esempio n. 2
0
 public override Continuation Evaluate(Continuation c, Environment env, Datum args)
 {
     var argList = args.ToArray();
     if (argList.Length != 2)
         throw c.error("Expected 2 arguments: (set! <symbol> <expression>). Got {0} instead", argList.Length);
     var name = argList[0].CastIdentifier();
     var expression = argList[1];
     c = c.PushTask(new SetName(env, name));
     return c.Evaluate(env, expression);
 }
Esempio n. 3
0
 public override Continuation Evaluate(Continuation c, LexicalEnvironment env, Datum args)
 {
     var argList = args.ToArray();
     if (argList.Length != 2)
         throw c.error("Expected 2 arguments: (define <symbol> <expression>). Got {0} instead", argList.Length);
     var name = argList[0].CastSymbol();
     var expression = argList[1];
     c = c.PushTask(
         tc => { env.Define(name, tc.Result);
                 return tc;},
         "define '{0}'", name);
     return c.Evaluate(env, expression);
 }
Esempio n. 4
0
 public override Continuation Evaluate(Continuation c, Environment 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 = new Environment(env);
     var remaining = argList.Reverse().ToArray();
     for (var i = 0; i < remaining.Length; ++i)
     {
         if (i > 0)
             c = c.PushTask(Ignore.Instance);
         c = c.Evaluate(localEnv, remaining[i]);
     }
     return c;
 }
Esempio n. 5
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;
 }
Esempio n. 6
0
 public override Continuation Evaluate(Continuation c, Datum args)
 {
     foreach (var ab in argBodies)
     {
         var closureEnv = ab.binding(env, args);
         if (closureEnv == null) continue;
         return c.Evaluate(closureEnv, ab.body);
     }
     throw bindError(args);
 }
Esempio n. 7
0
 public Continuation Perform(Continuation c)
 {
     var expansion = c.Result;
     c = c.PopResult();
     return c.Evaluate(env, expansion);
 }
Esempio n. 8
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);
 }