X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fpcl%2Fvector.lisp;h=2b4f2d21d6e718646e08aba3e5d99a22dd46f6a9;hb=731da68c7e3b7f2c4bc310aa75fc75f5aead24d2;hp=166208b812f58cb2a69ae303fc1846d701bfdca6;hpb=d0bdd647629a7184a3dc3597cd25d0022d15e936;p=sbcl.git diff --git a/src/pcl/vector.lisp b/src/pcl/vector.lisp index 166208b..2b4f2d2 100644 --- a/src/pcl/vector.lisp +++ b/src/pcl/vector.lisp @@ -985,12 +985,13 @@ ;; The lambda-list used by BIND-ARGS (bind-list lambda-list) (setq-p (getf (cdr lmf-params) :setq-p)) + (auxp (member '&aux bind-list)) (call-next-method-p (getf (cdr lmf-params) :call-next-method-p))) ;; Try to use the normal function call machinery instead of BIND-ARGS - ;; bindings the arguments, unless: + ;; binding the arguments, unless: (unless (or ;; If all arguments are required, BIND-ARGS will be a no-op ;; in any case. - (not restp) + (and (not restp) (not auxp)) ;; CALL-NEXT-METHOD wants to use BIND-ARGS, and needs a ;; list of all non-required arguments. call-next-method-p) @@ -1013,7 +1014,9 @@ '.rest-arg.)) (fmf-lambda-list (if rest-arg (append req-args (list '&rest rest-arg)) - lambda-list))) + (if call-next-method-p + req-args + lambda-list)))) `(list* :function (let* ((fmf (,(if (body-method-name body) 'named-lambda 'lambda)