class SexpProcessor::Environment

I really hate this here, but I hate subdirs in my lib dir more… I guess it is kinda like shaving… I'll split this out when it itches too much…

Public Class Methods

new() click to toggle source
# File lib/sexp_processor.rb, line 379
def initialize
  @env = []
  @env.unshift({})
end

Public Instance Methods

[](name) click to toggle source

TODO: depth_of

# File lib/sexp_processor.rb, line 394
def [] name
  hash = @env.find { |closure| closure.has_key? name }
  hash[name] if hash
end
[]=(name, val) click to toggle source
# File lib/sexp_processor.rb, line 399
def []= name, val
  hash = @env.find { |closure| closure.has_key? name } || current
  hash[name] = val
end
all() click to toggle source
# File lib/sexp_processor.rb, line 384
def all
  @env.reverse.inject { |env, scope| env.merge scope }
end
current() click to toggle source
# File lib/sexp_processor.rb, line 404
def current
  @env.first
end
depth() click to toggle source
# File lib/sexp_processor.rb, line 388
def depth
  @env.length
end
scope() { || ... } click to toggle source
# File lib/sexp_processor.rb, line 408
def scope
  @env.unshift({})
  begin
    yield
  ensure
    @env.shift
    raise "You went too far unextending env" if @env.empty?
  end
end