Method: Lisp::PrimEnvironment.environment_reference_type_impl

Defined in:
lib/rubylisp/prim_environment.rb

.environment_reference_type_impl(args, env) ⇒ Object



60
61
62
63
64
65
66
67
68
# File 'lib/rubylisp/prim_environment.rb', line 60

def self.environment_reference_type_impl(args, env)
  return Lisp::Debug.process_error("environment-reference-type requires an environment for it's first argument, received: #{args.car}", env) unless args.car.environment?
  return Lisp::Debug.process_error("environment-reference-type requires a symbol for it's second argument, received: #{args.cadr}", env) unless args.cadr.symbol?
  b = args.car.value.binding_for(args.cadr.value)
  return Lisp::Symbol.named("unbound") if b.nil?
  return Lisp::Symbol.named("unassigned") if b.value.nil?
  return Lisp::Symbol.named("macro") if b.value.binding?
  Lisp::Symbol.named("normal")
end