78
79
80
81
82
83
84
85
|
# File 'lib/rubylisp/prim_environment.rb', line 78
def self.environment_assignedp_impl(args, env)
return Lisp::Debug.process_error("environment-assigned? requires an environment for it's first argument, received: #{args.car}", env) unless args.car.environment?
return Lisp::Debug.process_error("environment-assigned? requires a symbol for it's second argument, received: #{args.cadr}", env) unless args.cadr.symbol?
return Lisp::Debug.process_error("environment-assigned?: #{args.cadr.to_s} is unbound", env) unless args.car.value.name_bound_locally?(args.cadr.name)
b = args.car.value.local_binding_for(args.cadr)
return Lisp::Debug.process_error("environment-assigned?: #{args.cadr.to_s} is bound to a macro", env) if b.value.macro?
Lisp::Boolean.with_value(!b.value.nil?)
end
|