From: Mattias EngdegÄrd Date: Fri, 7 Feb 2025 17:52:26 +0000 (+0100) Subject: Make the rx `eval` form use lexical binding when active X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=7c4167b010e2edfed8dcf6e165bb37922df3fb29;p=emacs.git Make the rx `eval` form use lexical binding when active Previously, it always used dynamic binding. * lisp/emacs-lisp/rx.el (rx--expand-eval): Heed `lexical-binding`. * test/lisp/emacs-lisp/rx-tests.el (rx-tests--x, rx-tests--get-x) (rx-eval): Add test case. * etc/NEWS: Announce. (cherry picked from commit 89f88f06a4667a01612704e57f8af43ca19b82c0) --- diff --git a/lisp/emacs-lisp/rx.el b/lisp/emacs-lisp/rx.el index 8fbe35220f1..c512d42cd15 100644 --- a/lisp/emacs-lisp/rx.el +++ b/lisp/emacs-lisp/rx.el @@ -1072,7 +1072,7 @@ Return (REGEXP . PRECEDENCE)." "Expand `eval' arguments. Return a new rx form." (unless (and body (null (cdr body))) (error "rx `eval' form takes exactly one argument")) - (eval (car body))) + (eval (car body) lexical-binding)) (defun rx--translate-eval (body) "Translate the `eval' form. Return (REGEXP . PRECEDENCE)." diff --git a/test/lisp/emacs-lisp/rx-tests.el b/test/lisp/emacs-lisp/rx-tests.el index bd11be7bc72..a485b0f29e1 100644 --- a/test/lisp/emacs-lisp/rx-tests.el +++ b/test/lisp/emacs-lisp/rx-tests.el @@ -485,11 +485,18 @@ (should (equal (rx "" (regexp x) (eval "")) "a*")))) +(eval-when-compile + (defvar rx-tests--x "LEX") + (defun rx-tests--get-x () rx-tests--x)) + (ert-deftest rx-eval () (should (equal (rx (eval (list 'syntax 'symbol))) "\\s_")) (should (equal (rx "a" (eval (concat)) "b") - "ab"))) + "ab")) + (should (equal (rx (eval (funcall (lambda (rx-tests--x) (rx-tests--get-x)) + "DYN"))) + "LEX"))) (ert-deftest rx-literal () (should (equal (rx (literal "$a"))