Merge pull request #337 from AndreaCrotti/upgrade-libraries
[jackhill/mal.git] / ruby / env.rb
CommitLineData
b5f469de
JM
1class Env
2 attr_accessor :data
3 def initialize(outer=nil, binds=[], exprs=[])
4 @data = {}
5 @outer = outer
8bf53bec
JM
6 binds.each_index do |i|
7 if binds[i] == :"&"
8 data[binds[i+1]] = exprs.drop(i)
9 break
10 else
11 data[binds[i]] = exprs[i]
12 end
13 end
14 return self
b5f469de
JM
15 end
16
17 def find(key)
18 if @data.key? key
19 return self
20 elsif @outer
21 return @outer.find(key)
22 else
23 return nil
24 end
25 end
26
27 def set(key, value)
28 @data[key] = value
29 return value
30 end
31
32 def get(key)
33 env = find(key)
34 raise "'" + key.to_s + "' not found" if not env
35 env.data[key]
36 end
37end