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
[]=(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
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 }
current() click to toggle source

Get the current/top environment.

# File lib/sexp_processor.rb, line 442
def current
depth() click to toggle source

Return the current number of scopes.

# File lib/sexp_processor.rb, line 415
def depth
scope() { || ... } click to toggle source

Create a new scope and yield to the block passed.

# File lib/sexp_processor.rb, line 449
def scope
    raise "You went too far unextending env" if @env.empty?