DISABLE FDs (REMOVE ME).
[jackhill/mal.git] / hy / env.hy
1 (import [hy.models [HySymbol :as Sym]])
2
3 (defn env-new [&optional [outer None] [binds []] [exprs []]]
4 (setv env {:outer outer})
5 (while binds
6 (if
7 (= (Sym "&") (first binds))
8 (do (assoc env (nth binds 1) (tuple exprs)) (break))
9
10 True
11 (do (assoc env (first binds) (first exprs))
12 (setv binds (list (rest binds))
13 exprs (list (rest exprs))))))
14 env)
15
16 (defn env-find [env k]
17 (if
18 (.has_key env k) env
19 (get env ':outer) (env-find (get env ':outer) k)
20 True None))
21
22 (defn env-get [env k]
23 (setv e (env-find env k))
24 (if-not e
25 (raise (Exception (+ "'" k "' not found"))))
26 (get e k))
27
28 (defn env-set [env k v]
29 (assoc env k v)
30 v)
31