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...
# File lib/sexp_processor.rb, line 337 def initialize @env = [] @env.unshift({}) end
TODO: depth_of
# File lib/sexp_processor.rb, line 352 def [] name hash = @env.find { |closure| closure.has_key? name } hash[name] if hash end
# File lib/sexp_processor.rb, line 357 def []= name, val hash = @env.find { |closure| closure.has_key? name } || @env.first hash[name] = val end
# File lib/sexp_processor.rb, line 342 def all @env.reverse.inject { |env, scope| env.merge scope } end
# File lib/sexp_processor.rb, line 346 def depth @env.length end
# File lib/sexp_processor.rb, line 362 def scope @env.unshift({}) begin yield ensure @env.shift raise "You went too far unextending env" if @env.empty? end end