public int PushLocal(string name, EvalObject val) { var id = idCounter++; locals.Add(new Local(id, name, val)); return(id); }
public EvalObject Call(EvalObject arg, Environment env) { var i = env.PushLocal(param, arg); var res = Evaluator.Instance.Eval(body); env.PopLocal(i); return(res); }
public EvalObject Assign(string name, EvalObject val) { for (int i = locals.Count - 1; i >= 0; --i) { var l = locals[i]; if (l.name == name) { return(l.val = val); } } return(values[name] = val); }
public Local(int id, string name, EvalObject val) { this.id = id; this.name = name; this.val = val; }
public EvalObject Call(EvalObject arg) { return(val(arg)); }