]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/emacs-lisp/gv.el (gv-define-simple-setter): Don't evaluate `val'
authorStefan Monnier <monnier@iro.umontreal.ca>
Wed, 7 Nov 2012 03:39:33 +0000 (22:39 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Wed, 7 Nov 2012 03:39:33 +0000 (22:39 -0500)
twice when `fix-return' is set.

Fixes: debbugs:12813
lisp/ChangeLog
lisp/emacs-lisp/gv.el

index b88baaa2f0a3b6bdd188767a45c7f48d515cfe9a..187ff2d7e1da080767672412dbcab3f1506c87d2 100644 (file)
@@ -1,5 +1,8 @@
 2012-11-07  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+       * emacs-lisp/gv.el (gv-define-simple-setter): Don't evaluate `val'
+       twice when `fix-return' is set (bug#12813).
+
        * emacs-lisp/cl.el (defsetf): Pass the third arg to
        gv-define-simple-setter (bug#12812).
 
index 3dd021f9e74a83a63f4e6fdeee318011d043d0a4..a0c412a95043c4497fe21cf09cb670a5e862ab24 100644 (file)
@@ -213,9 +213,11 @@ If FIX-RETURN is non-nil, then SETTER is not assumed to return VAL and
 instead the assignment is turned into (prog1 VAL (SETTER ARGS... VAL))
 so as to preserve the semantics of `setf'."
   (declare (debug (sexp (&or symbolp lambda-expr) &optional sexp)))
-  (let ((set-call `(cons ',setter (append args (list val)))))
   `(gv-define-setter ,name (val &rest args)
-     ,(if fix-return `(list 'prog1 val ,set-call) set-call))))
+     ,(if fix-return
+          `(macroexp-let2 nil v val
+             (cons ',setter (append args (list v))))
+        `(cons ',setter (append args (list val))))))
 
 ;;; Typical operations on generalized variables.