class Environment

Public Class Methods

new(parent = nil, defaults = {}) click to toggle source
# File lib/schemerald/Environment.rb, line 2
def initialize(parent = nil, defaults = {})
  @parent = parent
  @defaults = defaults
end

Public Instance Methods

define(symbol, value) click to toggle source
# File lib/schemerald/Environment.rb, line 7
def define(symbol, value)
  @defaults[symbol] = value
  return value
end
defined?(symbol) click to toggle source
# File lib/schemerald/Environment.rb, line 12
def defined?(symbol)
  return true if @defaults.has_key?(symbol)
  return false if @parent.nil?
  return @parent.defined?(symbol)
end
get_value(symbol) click to toggle source
# File lib/schemerald/Environment.rb, line 29
def get_value(symbol)
  return @defaults[symbol] if @defaults.has_key?(symbol)
  raise SchemeError,
    "#{symbol}: undefined;\nCannot reference undefined identifier" if @parent.nil?
  return @parent.get_value(symbol)
end
set_value(symbol, value) click to toggle source
# File lib/schemerald/Environment.rb, line 18
def set_value(symbol, value)
  if @defaults.has_key?(symbol)
    @defaults[symbol] = value
  elsif @parent.nil?
    raise SchemeError,
      "assignment disallowed;\ncannot set undefined\nvariable: #{symbol}"
  else
    @parent.set_value(symbol, value)
  end
end