crystal: implement step3 basic functionality
[jackhill/mal.git] / crystal / env.cr
1 require "./types"
2
3 module Mal
4
5 class Env
6 property data
7
8 def initialize(@outer)
9 @data = {} of String => Mal::Type
10 end
11
12 def set(key, value)
13 @data[key] = value
14 end
15
16 def find(key)
17 return self if @data.has_key? key
18
19 o = @outer
20 if o
21 o.find key
22 else
23 nil
24 end
25 end
26
27 def get(key)
28 e = find(key)
29 raise EvalException.new "#{key} not found" unless e
30 e.data[key]
31 end
32 end
33
34 end