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