Ruby,Python,C#: readline history fixes. Ruby include path.
[jackhill/mal.git] / python / env.py
1 # Environment
2
3 class Env():
4 def __init__(self, outer=None, binds=None, exprs=None):
5 self.data = {}
6 self.outer = outer or None
7
8 if binds:
9 for i in range(len(binds)):
10 if binds[i] == "&":
11 self.data[binds[i+1]] = exprs[i:]
12 break
13 else:
14 self.data[binds[i]] = exprs[i]
15
16 def find(self, key):
17 if key in self.data: return self
18 elif self.outer: return self.outer.find(key)
19 else: return None
20
21 def set(self, key, value):
22 self.data[key] = value
23 return value
24
25 def get(self, key):
26 env = self.find(key)
27 if not env: raise Exception("'" + key + "' not found")
28 return env.data[key]