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)
"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)."
(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"))