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).
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.