X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fpcl%2Fvector.lisp;h=231ca8d1a711ecaa132c3acaaf1e84458e456a94;hb=3a2c2a2217f77e0d1a44a581c83e0311ebc2594a;hp=995fa6ffdb3f86d1191362363f35134e33b2468c;hpb=ff92598854bf7cae8d57fe49cef4d9a98e1ab345;p=sbcl.git diff --git a/src/pcl/vector.lisp b/src/pcl/vector.lisp index 995fa6f..231ca8d 100644 --- a/src/pcl/vector.lisp +++ b/src/pcl/vector.lisp @@ -958,7 +958,7 @@ simple-bit-vector simple-string simple-vector single-float standard-char stream string symbol t unsigned-byte vector)) -(defun split-declarations (body args calls-next-method-p) +(defun split-declarations (body args maybe-reads-params-p) (let ((inner-decls nil) (outer-decls nil) decl) @@ -1011,7 +1011,7 @@ ;; involved, to prevent compiler ;; warnings about ignored args being ;; read. - (unless (and calls-next-method-p + (unless (and maybe-reads-params-p (eq (car dname) 'ignore)) (push var outers)) (push var inners))) @@ -1044,7 +1044,7 @@ (defun name-method-lambda (method-lambda) (let ((method-name (body-method-name (cddr method-lambda)))) (if method-name - `(named-lambda ,method-name ,(rest method-lambda)) + `(named-lambda (slow-method ,method-name) ,(rest method-lambda)) method-lambda))) (defun make-method-initargs-form-internal (method-lambda initargs env) @@ -1083,7 +1083,8 @@ (initargs body req-args lmf-params restp) (multiple-value-bind (outer-decls inner-decls body-sans-decls) (split-declarations - body req-args (getf (cdr lmf-params) :call-next-method-p)) + body req-args (or (getf (cdr lmf-params) :call-next-method-p) + (getf (cdr lmf-params) :setq-p))) (let* ((rest-arg (when restp '.rest-arg.)) (args+rest-arg (if restp (append req-args (list rest-arg)) @@ -1092,7 +1093,8 @@ :fast-function (,(if (body-method-name body) 'named-lambda 'lambda) ,@(when (body-method-name body) - (list (body-method-name body))) ; function name + ;; function name + (list (cons 'fast-method (body-method-name body)))) (.pv-cell. .next-method-call. ,@args+rest-arg) ; function args ;; body of the function (declare (ignorable .pv-cell. .next-method-call.)) @@ -1149,13 +1151,7 @@ (apply fmf pv-cell nmc (nconc args (list rest)))) (apply fmf pv-cell nmc method-args))))) (let* ((fname (method-function-get fmf :name)) - (name `(,(or (get (car fname) 'method-sym) - (setf (get (car fname) 'method-sym) - (let ((str (symbol-name (car fname)))) - (if (string= "FAST-" str :end2 5) - (format-symbol *pcl-package* (subseq str 5)) - (car fname))))) - ,@(cdr fname)))) + (name (cons 'slow-method (cdr fname)))) (set-fun-name method-function name)) (setf (method-function-get method-function :fast-function) fmf) method-function))