aboutsummaryrefslogtreecommitdiff
path: root/python/env.py
diff options
context:
space:
mode:
Diffstat (limited to 'python/env.py')
-rw-r--r--python/env.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/python/env.py b/python/env.py
new file mode 100644
index 0000000..4cd8e05
--- /dev/null
+++ b/python/env.py
@@ -0,0 +1,28 @@
+# Environment
+
+class Env():
+ def __init__(self, outer=None, binds=None, exprs=None):
+ self.data = {}
+ self.outer = outer or None
+
+ if binds:
+ for i in range(len(binds)):
+ if binds[i] == "&":
+ self.data[binds[i+1]] = exprs[i:]
+ break
+ else:
+ self.data[binds[i]] = exprs[i]
+
+ def find(self, key):
+ if key in self.data: return self
+ elif self.outer: return self.outer.find(key)
+ else: return None
+
+ def set(self, key, value):
+ self.data[key] = value
+ return value
+
+ def get(self, key):
+ env = self.find(key)
+ if not env: raise Exception("'" + key + "' not found")
+ return env.data[key]