1
1
mirror of https://github.com/kanaka/mal.git synced 2024-09-19 17:47:53 +03:00
mal/impls/wren/env.wren
Joel Martin 8a19f60386 Move implementations into impls/ dir
- Reorder README to have implementation list after "learning tool"
  bullet.

- This also moves tests/ and libs/ into impls. It would be preferrable
  to have these directories at the top level.  However, this causes
  difficulties with the wasm implementations which need pre-open
  directories and have trouble with paths starting with "../../". So
  in lieu of that, symlink those directories to the top-level.

- Move the run_argv_test.sh script into the tests directory for
  general hygiene.
2020-02-10 23:50:16 -06:00

41 lines
752 B
Plaintext

import "./types" for MalList
class Env {
construct new() {
_outer = null
_data = {}
}
construct new(outer) {
_outer = outer
_data = {}
}
construct new(outer, binds, exprs) {
_outer = outer
_data = {}
for (i in 0...binds.count) {
if (binds[i].value == "&") {
_data[binds[i + 1].value] = MalList.new(exprs[i..-1])
break
} else {
_data[binds[i].value] = exprs[i]
}
}
}
set(k, v) { _data[k] = v }
find(k) {
if (_data.containsKey(k)) return this
if (_outer) return _outer.find(k)
return null
}
get(k) {
var foundEnv = find(k)
if (!foundEnv) Fiber.abort("'%(k)' not found")
return foundEnv.getValue(k)
}
getValue(k) { _data[k] }
}