From: Mattias EngdegÄrd Date: Wed, 7 Sep 2022 15:55:44 +0000 (+0200) Subject: Improve save-match-data hygiene X-Git-Tag: emacs-29.0.90~1856^2~678 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=35b4205dee6c65e3e0fd00708eb95c84f2ca49e6;p=emacs.git Improve save-match-data hygiene * lisp/subr.el (save-match-data): Use uninterned variable symbol. Remove outdated comments. --- diff --git a/lisp/subr.el b/lisp/subr.el index 03d678f20d7..c7b86c83e8c 100644 --- a/lisp/subr.el +++ b/lisp/subr.el @@ -4956,10 +4956,6 @@ If `default-directory' is already an existing directory, it's not changed." ;;; Matching and match data. -;; We use save-match-data-internal as the local variable because -;; that works ok in practice (people should not use that variable elsewhere). -;; We used to use an uninterned symbol; the compiler handles that properly -;; now, but it generates slower code. (defmacro save-match-data (&rest body) "Execute the BODY forms, restoring the global value of the match data. The value returned is the value of the last form in BODY. @@ -4971,13 +4967,12 @@ rather than your caller's match data." ;; because that makes a bootstrapping problem ;; if you need to recompile all the Lisp files using interpreted code. (declare (indent 0) (debug t)) - (list 'let - '((save-match-data-internal (match-data))) - (list 'unwind-protect - (cons 'progn body) - ;; It is safe to free (evaporate) markers immediately here, - ;; as Lisp programs should not copy from save-match-data-internal. - '(set-match-data save-match-data-internal 'evaporate)))) + (let ((saved-match-data (make-symbol "saved-match-data"))) + (list 'let + (list (list saved-match-data '(match-data))) + (list 'unwind-protect + (cons 'progn body) + (list 'set-match-data saved-match-data t))))) (defun match-string (num &optional string) "Return the string of text matched by the previous search or regexp operation.