forked from kanaka/mal
-
Notifications
You must be signed in to change notification settings - Fork 0
/
env.json
42 lines (36 loc) · 1.35 KB
/
env.json
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
["do",
["def", "env-bind", ["fn", ["env", "b", "e"],
["if", ["empty?", "b"],
"env",
["if", ["=", ["`", "&"],
["get", ["first", "b"], ["`", "val"]]],
["assoc!", "env", ["get", ["nth", "b", 1], ["`", "val"]], "e"],
["env-bind", ["assoc!", "env", ["get", ["first", "b"], ["`", "val"]],
["first", "e"]],
["rest", "b"],
["rest", "e"]]]]]],
["def", "env-new", ["fn", ["&", "args"],
["let", ["env", ["hash-map", ["`", "__outer__"], ["first", "args"]]],
["if", ["<=", ["count", "args"], 1],
"env",
["env-bind", "env", ["get", "args", 1], ["get", "args", 2]]]]]],
["def", "env-find", ["fn", ["env", "key"],
["let", ["k", ["get", "key", ["`", "val"]]],
["if", ["contains?", "env", "k"],
"env",
["if", ["get", "env", ["`", "__outer__"]],
["env-find", ["get", "env", ["`", "__outer__"]], "key"],
null]]]]],
["def", "env-get", ["fn", ["env", "key"],
["let", ["k", ["get", "key", ["`", "val"]],
"e", ["env-find", "env", "key"]],
["if", "e",
["get", "e", "k"],
["throw", ["str", ["`", "'"], "k", ["`", "' not found"]]]]]]],
["def", "env-set", ["fn", ["env", "key", "val"],
["let", ["k", ["get", "key", ["`", "val"]]],
["do",
["assoc!", "env", "k", "val"],
"val"]]]],
null
]