mirror of
https://github.com/kanaka/mal.git
synced 2024-10-27 14:52:16 +03:00
8a19f60386
- 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.
41 lines
752 B
Plaintext
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] }
|
|
}
|