Commit | Line | Data |
---|---|---|
defc6335 JM |
1 | ["do", |
2 | ||
3 | ["def", "env-bind", ["fn", ["env", "b", "e"], | |
4 | ["if", ["empty?", "b"], | |
5 | "env", | |
6 | ["if", ["=", ["`", "&"], | |
7 | ["get", ["first", "b"], ["`", "val"]]], | |
8 | ["assoc!", "env", ["get", ["nth", "b", 1], ["`", "val"]], "e"], | |
9 | ["env-bind", ["assoc!", "env", ["get", ["first", "b"], ["`", "val"]], | |
7ebf5219 | 10 | ["first", "e"]], |
defc6335 JM |
11 | ["rest", "b"], |
12 | ["rest", "e"]]]]]], | |
13 | ||
14 | ["def", "env-new", ["fn", ["&", "args"], | |
15 | ["let", ["env", ["hash-map", ["`", "__outer__"], ["first", "args"]]], | |
16 | ["if", ["<=", ["count", "args"], 1], | |
17 | "env", | |
7ebf5219 | 18 | ["env-bind", "env", ["get", "args", 1], ["get", "args", 2]]]]]], |
defc6335 JM |
19 | |
20 | ["def", "env-find", ["fn", ["env", "key"], | |
21 | ["let", ["k", ["get", "key", ["`", "val"]]], | |
22 | ["if", ["contains?", "env", "k"], | |
23 | "env", | |
24 | ["if", ["get", "env", ["`", "__outer__"]], | |
25 | ["env-find", ["get", "env", ["`", "__outer__"]], "key"], | |
26 | null]]]]], | |
27 | ||
28 | ["def", "env-get", ["fn", ["env", "key"], | |
29 | ["let", ["k", ["get", "key", ["`", "val"]], | |
30 | "e", ["env-find", "env", "key"]], | |
31 | ["if", "e", | |
32 | ["get", "e", "k"], | |
33 | ["throw", ["str", ["`", "'"], "k", ["`", "' not found"]]]]]]], | |
34 | ||
35 | ["def", "env-set", ["fn", ["env", "key", "val"], | |
36 | ["let", ["k", ["get", "key", ["`", "val"]]], | |
37 | ["do", | |
38 | ["assoc!", "env", "k", "val"], | |
39 | "val"]]]], | |
40 | ||
41 | null | |
42 | ] |