Commit | Line | Data |
---|---|---|
732f2170 | 1 | export function new_env(outer={}, binds=[], exprs=[]) { |
4f8c7db9 | 2 | var e = Object.setPrototypeOf({}, outer) |
732f2170 JM |
3 | // Bind symbols in binds to values in exprs |
4 | for (var i=0; i<binds.length; i++) { | |
4f8c7db9 JM |
5 | if (Symbol.keyFor(binds[i]) === "&") { |
6 | e[binds[i+1]] = exprs.slice(i) // variable length arguments | |
7 | break | |
732f2170 | 8 | } else { |
4f8c7db9 | 9 | e[binds[i]] = exprs[i] |
732f2170 JM |
10 | } |
11 | } | |
4f8c7db9 | 12 | return e |
732f2170 | 13 | } |
4f8c7db9 JM |
14 | export const env_get = (env, sym) => { |
15 | if (sym in env) { | |
16 | return env[sym] | |
5024b694 | 17 | } else { |
4f8c7db9 | 18 | throw Error(`'${Symbol.keyFor(sym)}' not found`) |
5024b694 JM |
19 | } |
20 | } | |
4f8c7db9 | 21 | export const env_set = (env, sym, val) => env[sym] = val |