1 types = require "./types.coffee"
4 exports.Env = class Env
5 constructor: (@outer=null, @binds=[], @exprs=[]) ->
9 if types._symbol_Q(b) && b.name == "&"
10 @data[@binds[i+1].name] = @exprs[i..]
13 @data[b.name] = @exprs[i]
15 if not types._symbol_Q(key)
16 throw new Error("env.find key must be symbol")
17 if key.name of @data then @
18 else if @outer then @outer.find(key)
21 if not types._symbol_Q(key)
22 throw new Error("env.set key must be symbol")
23 @data[key.name] = value
25 if not types._symbol_Q(key)
26 throw new Error("env.get key must be symbol")
28 throw new Error("'" + key.name + "' not found") if !env