[Openmcl-devel] Openmcl/SLIME problem
Takehiko Abe
keke at gol.com
Thu Feb 28 17:44:56 PST 2008
Neil Baylis wrote:
> I run into a problem when running SLIME with Clozure Common Lisp
> (a.k.a. openmcl).
>
> When I call a function with the wrong number of args, the error
> message is unhelpful. When I do the same running openmcl directly
> (not via SLIME) it works correctly. Here's a transcript:
I tried the same and it appeared to work correctly. However,
;; Welcome to Clozure Common Lisp Version 1.1-r (LinuxX8664)!
;; ? (defun foo (a b) (+ a b))
;; FOO
;; ? (foo 1)
;; > Error: Too few arguments in call to #<Compiled-function FOO
;; > 1 arguments provided, at least 2 required.
;; > While executing: FOO, in process listener(1).
;; > Type :POP to abort, :R for a list of available restarts.
;; > Type :? for other options.
;; 1> (:f 0)
;; (2AAAAACBBAC0) : 0 (FOO ? ?) 15#<error printing args and locals>
Note the #<error printing args and locals>.
Slime tries to print this "args and locals" and that triggers an
error in openmcl.
The error is signaled in ccl::arguments-and-locals:
;; ; SLIME 2007-06-28
;; CL-USER> (defun foo (a b) (+ a b))
;; FOO
;; CL-USER> (foo 1)
;; > Error: value -2 is not of the expected type UNSIGNED-BYTE.
;; > While executing: NBUTLAST, in process repl-thread(5).
;; > Type :POP to abort, :R for a list of available restarts.
;; > Type :? for other options.
;; 1> :b
;;
;; (2AAAABD47098) : 0 (NBUTLAST NIL [...]) 237
;; (2AAAABD470E0) : 1 (ARGUMENTS-AND-LOCALS
;; NIL
;; 5864064454420
;; #<Compiled-function FOO #x30004104FE6F>
;; 15
;; [...]) 1085
NBUTLAST is called with (nil -2) because ccl::variables-in-scope
returns nil:
(defun arguments-and-locals (context cfp lfun pc &optional unavailable)
(multiple-value-bind (vars map-indices) (variables-in-scope lfun pc)
(collect ((args)
(locals))
(multiple-value-bind (valid req opt rest keys)
(arg-names-from-map lfun pc)
(when valid
(let* ((nargs (+ (length req) ...))
(nlocals (- (length vars) nargs))
(local-vars (nthcdr nargs vars))
(local-indices (nthcdr nargs map-indices))
(arg-vars (nbutlast vars nlocals))
(arg-indices (nbutlast map-indices nlocals)))
...
More information about the Openmcl-devel
mailing list