Merge pull request #519 from dubek/fix-ruby-keyword
[jackhill/mal.git] / impls / miniMAL / env.json
CommitLineData
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
41null
42]