X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fpcl%2Fvector.lisp;h=cc5ef22cfe3f0e8c096c8d97977e0b295f43a609;hb=2e47ed527bdcb76cf5eb52f66cc08f4fb0a0041d;hp=166208b812f58cb2a69ae303fc1846d701bfdca6;hpb=d0bdd647629a7184a3dc3597cd25d0022d15e936;p=sbcl.git diff --git a/src/pcl/vector.lisp b/src/pcl/vector.lisp index 166208b..cc5ef22 100644 --- a/src/pcl/vector.lisp +++ b/src/pcl/vector.lisp @@ -811,6 +811,7 @@ %method-lambda-list optimize ftype + muffle-conditions inline notinline)) @@ -985,12 +986,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 +1015,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)