Merge branch 'master' into issue_166_string_ops
[jackhill/mal.git] / es6 / env.js
CommitLineData
732f2170 1export 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
14export 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 21export const env_set = (env, sym, val) => env[sym] = val