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 Instance Methods
[](name)
click to toggle source
Get name
from env at whatever scope it is defined in, or return nil.
# File lib/sexp_processor.rb, line 424 def [] name hash = @env.find { |closure| closure.key? name } hash[name] if hash end
[]=(name, val)
click to toggle source
If name
exists in the env, set it to val
in whatever scope it is in. If it doesn’t exist, set name
to val
in the current scope.
# File lib/sexp_processor.rb, line 434 def []= name, val hash = @env.find { |closure| closure.key? name } || current hash[name] = val end
all()
click to toggle source
Flatten out all scopes and return all key/value pairs.
# File lib/sexp_processor.rb, line 408 def all @env.reverse.inject { |env, scope| env.merge scope } end
current()
click to toggle source
Get the current/top environment.
# File lib/sexp_processor.rb, line 442 def current @env.first end
depth()
click to toggle source
Return the current number of scopes.
# File lib/sexp_processor.rb, line 415 def depth @env.length end
scope() { || ... }
click to toggle source
Create a new scope and yield to the block passed.
# File lib/sexp_processor.rb, line 449 def scope @env.unshift({}) begin yield ensure @env.shift raise "You went too far unextending env" if @env.empty? end end