diff options
author | Štěpán Němec <stepnem@gmail.com> | 2020-04-12 00:27:51 +0200 |
---|---|---|
committer | Štěpán Němec <stepnem@gmail.com> | 2020-08-25 17:59:05 +0200 |
commit | 0e01d5aa723cd50749f9028f0e8ad85a3afe52aa (patch) | |
tree | ec8f562e12be1dc70185801b34c1c373aeab9667 /lisp | |
parent | f3e29733bbe63950b3ef1259744723193ff5f388 (diff) | |
download | emacs-0e01d5aa723cd50749f9028f0e8ad85a3afe52aa.tar.gz emacs-0e01d5aa723cd50749f9028f0e8ad85a3afe52aa.tar.bz2 emacs-0e01d5aa723cd50749f9028f0e8ad85a3afe52aa.zip |
Preserve setf semantics in 'substring', 'cons', 'logand' expanders
* doc/lispref/variables.texi (Adding Generalized Variables): Fix example.
* lisp/emacs-lisp/cl-lib.el (substring)
* lisp/emacs-lisp/gv.el (cons, logand): Return the value being
assigned, as specified for 'setf'. (bug#35546)
Diffstat (limited to 'lisp')
-rw-r--r-- | lisp/emacs-lisp/cl-lib.el | 7 | ||||
-rw-r--r-- | lisp/emacs-lisp/gv.el | 18 |
2 files changed, 17 insertions, 8 deletions
diff --git a/lisp/emacs-lisp/cl-lib.el b/lisp/emacs-lisp/cl-lib.el index 7a26d9a90fd..7a4d3c9c3e3 100644 --- a/lisp/emacs-lisp/cl-lib.el +++ b/lisp/emacs-lisp/cl-lib.el @@ -619,8 +619,11 @@ If ALIST is non-nil, the new pairs are prepended to it." (macroexp-let2* nil ((start from) (end to)) (funcall do `(substring ,getter ,start ,end) (lambda (v) - (funcall setter `(cl--set-substring - ,getter ,start ,end ,v)))))))) + (macroexp-let2 nil v v + `(progn + ,(funcall setter `(cl--set-substring + ,getter ,start ,end ,v)) + ,v)))))))) ;;; Miscellaneous. diff --git a/lisp/emacs-lisp/gv.el b/lisp/emacs-lisp/gv.el index 513bd328899..78d86b9fc31 100644 --- a/lisp/emacs-lisp/gv.el +++ b/lisp/emacs-lisp/gv.el @@ -527,9 +527,12 @@ This macro only makes sense when used in a place." (gv-letplace (dgetter dsetter) d (funcall do `(cons ,agetter ,dgetter) - (lambda (v) `(progn - ,(funcall asetter `(car ,v)) - ,(funcall dsetter `(cdr ,v))))))))) + (lambda (v) + (macroexp-let2 nil v v + `(progn + ,(funcall asetter `(car ,v)) + ,(funcall dsetter `(cdr ,v)) + ,v)))))))) (put 'logand 'gv-expander (lambda (do place &rest masks) @@ -539,9 +542,12 @@ This macro only makes sense when used in a place." (funcall do `(logand ,getter ,mask) (lambda (v) - (funcall setter - `(logior (logand ,v ,mask) - (logand ,getter (lognot ,mask)))))))))) + (macroexp-let2 nil v v + `(progn + ,(funcall setter + `(logior (logand ,v ,mask) + (logand ,getter (lognot ,mask)))) + ,v)))))))) ;;; References |