1 local rex
= require('rex_pcre')
2 local string = require('string')
3 local table = require('table')
4 local utils
= require('utils')
5 local types
= require('types')
9 function Env
:new(outer
, binds
, exprs
)
11 local newObj
= {outer
= outer
, data
= data
}
14 for i
, b
in ipairs(binds
) do
15 if binds
[i
].val
== '&' then
16 local new_exprs
= types
.List
:new()
18 table.insert(new_exprs
, exprs
[j
])
20 table.remove(exprs
, 1)
21 data
[binds
[i
+1].val
] = new_exprs
24 data
[binds
[i
].val
] = exprs
[i
]
27 return setmetatable(newObj
, self
)
29 function Env
:find(sym
)
30 if self
.data
[sym
.val
] ~= nil then
33 if self
.outer
~= nil then
34 return self
.outer
:find(sym
)
40 function Env
:set(sym
,val
)
41 self
.data
[sym
.val
] = val
45 local env
= self
:find(sym
)
47 return env
.data
[sym
.val
]
49 types
.throw("'"..sym
.val
.."' not found")