Merge branch 'master' into issue_166_string_ops
[jackhill/mal.git] / es6 / env.js
1 export function new_env(outer={}, binds=[], exprs=[]) {
2 var e = Object.setPrototypeOf({}, outer)
3 // Bind symbols in binds to values in exprs
4 for (var i=0; i<binds.length; i++) {
5 if (Symbol.keyFor(binds[i]) === "&") {
6 e[binds[i+1]] = exprs.slice(i) // variable length arguments
7 break
8 } else {
9 e[binds[i]] = exprs[i]
10 }
11 }
12 return e
13 }
14 export const env_get = (env, sym) => {
15 if (sym in env) {
16 return env[sym]
17 } else {
18 throw Error(`'${Symbol.keyFor(sym)}' not found`)
19 }
20 }
21 export const env_set = (env, sym, val) => env[sym] = val