matlab: start of step4
[jackhill/mal.git] / matlab / Env.m
CommitLineData
ab6e6fae
JM
1classdef Env < handle
2 properties
3 data
4 outer
5 end
6 methods
d6624158 7 function env = Env(outer, binds, exprs)
ab6e6fae
JM
8 env.data = containers.Map();
9 env.outer = outer;
d6624158
JM
10
11 if nargin > 1
12 env = Env(outer);
13 for i=1:length(binds)
14 k = binds{i}.name;
15 if strcmp(k, '&')
16 env.data(binds{i+1}.name) = exprs(i:end);
17 break;
18 else
19 env.data(k) = exprs{i};
20 end
21 end
22 end
ab6e6fae 23 end
d6624158 24
ab6e6fae
JM
25 function ret = set(env, k, v)
26 env.data(k.name) = v;
27 ret = v;
28 end
29 function ret = find(env, k)
30 if env.data.isKey(k.name)
31 ret = env;
32 else
33 if ~islogical(env.outer)
34 ret = env.outer.find(k);
35 else
36 ret = false;
37 end
38 end
39 end
40 function ret = get(env, k)
41 fenv = env.find(k);
42 if ~islogical(fenv)
43 ret = fenv.data(k.name);
44 else
45 throw(MException('ENV:notfound', ...
46 strcat('''', k.name, ''' not found')));
47 end
48 end
49 end
50end