python: remove extraneous macroexpand call.
[jackhill/mal.git] / lua / env.lua
CommitLineData
9d42904e
JM
1local rex = require('rex_pcre')
2local string = require('string')
3local table = require('table')
4local utils = require('utils')
5local types = require('types')
6
7local Env = {}
8
9function Env:new(outer, binds, exprs)
10 local data = {}
11 local newObj = {outer = outer, data = data}
12 self.__index = self
13 if binds then
14 for i, b in ipairs(binds) do
15 if binds[i].val == '&' then
16 local new_exprs = types.List:new()
17 for j = i, #exprs do
18 table.insert(new_exprs, exprs[j])
19 end
20 table.remove(exprs, 1)
21 data[binds[i+1].val] = new_exprs
22 break
23 end
24 data[binds[i].val] = exprs[i]
25 end
26 end
27 return setmetatable(newObj, self)
28end
29function Env:find(sym)
30 if self.data[sym.val] ~= nil then
31 return self
32 else
33 if self.outer ~= nil then
34 return self.outer:find(sym)
35 else
36 return nil
37 end
38 end
39end
40function Env:set(sym,val)
41 self.data[sym.val] = val
42 return val
43end
44function Env:get(sym)
45 local env = self:find(sym)
46 if env then
47 return env.data[sym.val]
48 else
49 types.throw("'"..sym.val.."' not found")
50 end
51end
52
53return Env