X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Flate-setf.lisp;h=1d41c5c40b3de80c30912ceef69396caadfccabc;hb=15d6e7c9a2c3234f95dfe278046fa2fee1b0c007;hp=f5f3a974ff16ff7c8eee59fba542deae88d97a0e;hpb=cea4896b2482b7b2b429c1631d774b4cfbc0efba;p=sbcl.git diff --git a/src/code/late-setf.lisp b/src/code/late-setf.lisp index f5f3a97..1d41c5c 100644 --- a/src/code/late-setf.lisp +++ b/src/code/late-setf.lisp @@ -85,9 +85,12 @@ (dolist (place places) (multiple-value-bind (dummies vals newval setter getter) (sb!xc:get-setf-expansion place env) - (setq all-dummies (append all-dummies dummies) - all-vals (append all-vals vals) - newvals (append newvals newval)) + ;; ANSI 5.1.2.3 explains this logic quite precisely. -- + ;; CSR, 2004-06-29 + (setq all-dummies (append all-dummies dummies (cdr newval)) + all-vals (append all-vals vals + (mapcar (constantly nil) (cdr newval))) + newvals (append newvals (list (car newval)))) (setters setter) (getters getter))) (values all-dummies all-vals newvals