Mercurial > emacs
changeset 78570:328998bce865
(cl-transform-lambda): Preserve the match-data.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Thu, 16 Aug 2007 04:24:57 +0000 |
parents | ef9caa847a49 |
children | fd7a34f481ad |
files | lisp/ChangeLog lisp/emacs-lisp/cl-macs.el |
diffstat | 2 files changed, 17 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/ChangeLog Thu Aug 16 03:23:07 2007 +0000 +++ b/lisp/ChangeLog Thu Aug 16 04:24:57 2007 +0000 @@ -1,3 +1,7 @@ +2007-08-16 Stefan Monnier <monnier@iro.umontreal.ca> + + * emacs-lisp/cl-macs.el (cl-transform-lambda): Preserve the match-data. + 2007-08-16 Glenn Morris <rgm@gnu.org> * ps-print.el (ps-font-size): Doc fix.
--- a/lisp/emacs-lisp/cl-macs.el Thu Aug 16 03:23:07 2007 +0000 +++ b/lisp/emacs-lisp/cl-macs.el Thu Aug 16 04:24:57 2007 +0000 @@ -266,15 +266,19 @@ (nconc (nreverse simple-args) (list '&rest (car (pop bind-lets)))) (nconc (let ((hdr (nreverse header))) - (require 'help-fns) - (cons (help-add-fundoc-usage - (if (stringp (car hdr)) (pop hdr)) - ;; orig-args can contain &cl-defs (an internal CL - ;; thingy that I do not understand), so remove it. - (let ((x (memq '&cl-defs orig-args))) - (if (null x) orig-args - (delq (car x) (remq (cadr x) orig-args))))) - hdr)) + ;; Macro expansion can take place in the middle of + ;; apparently harmless computation, so it should not + ;; touch the match-data. + (save-match-data + (require 'help-fns) + (cons (help-add-fundoc-usage + (if (stringp (car hdr)) (pop hdr)) + ;; orig-args can contain &cl-defs (an internal + ;; CL thingy I don't understand), so remove it. + (let ((x (memq '&cl-defs orig-args))) + (if (null x) orig-args + (delq (car x) (remq (cadr x) orig-args))))) + hdr))) (list (nconc (list 'let* bind-lets) (nreverse bind-forms) body)))))))