aboutsummaryrefslogtreecommitdiff
path: root/ruby/env.rb
diff options
context:
space:
mode:
Diffstat (limited to 'ruby/env.rb')
-rw-r--r--ruby/env.rb28
1 files changed, 28 insertions, 0 deletions
diff --git a/ruby/env.rb b/ruby/env.rb
new file mode 100644
index 0000000..dfd5ec9
--- /dev/null
+++ b/ruby/env.rb
@@ -0,0 +1,28 @@
+class Env
+ attr_accessor :data
+ def initialize(outer=nil, binds=[], exprs=[])
+ @data = {}
+ @outer = outer
+ end
+
+ def find(key)
+ if @data.key? key
+ return self
+ elsif @outer
+ return @outer.find(key)
+ else
+ return nil
+ end
+ end
+
+ def set(key, value)
+ @data[key] = value
+ return value
+ end
+
+ def get(key)
+ env = find(key)
+ raise "'" + key.to_s + "' not found" if not env
+ env.data[key]
+ end
+end